Visual Basic .NET Language
構文の概要
サーチ…
コメント
最初に興味深いのは、コメントを書く方法です。
VB .NETでは、アポストロフィを書くか、 REM
を書くことでコメントを書いています。これは、残りの行がコンパイラによって考慮されないことを意味します。
'This entire line is a comment
Dim x As Integer = 0 'This comment is here to say we give 0 value to x
REM There are no such things as multiline comments
'So we have to start everyline with the apostrophe or REM
Intellisenseヘルパー
興味深いのは、Visual Studio Intellisenseに独自のコメントを追加する機能です。したがって、自分で作成した関数やクラスを自明にすることができます。これを行うには、関数の上の行の3倍のコメントシンボルを入力する必要があります。
Visual Studioは自動的にXMLドキュメントを追加します。
''' <summary>
''' This function returns a hello to your name
''' </summary>
''' <param name="Name">Your Name</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Test(Name As String) As String
Return "Hello " & Name
End Function
その後、テスト関数をコードのどこかに入力すると、この小さなヘルプが表示されます:
変数の宣言
VB.NETでは、すべての変数を使用する前に宣言する必要があります( Option ExplicitがOnに設定されている場合)。変数を宣言する方法は2つあります。
-
Function
またはSub
内部:
Dim w 'Declares a variable named w of type Object (invalid if Option Strict is On)
Dim x As String 'Declares a variable named x of type String
Dim y As Long = 45 'Declares a variable named y of type Long and assigns it the value 45
Dim z = 45 'Declares a variable named z whose type is inferred
'from the type of the assigned value (Integer here) (if Option Infer is On)
'otherwise the type is Object (invalid if Option Strict is On)
'and assigns that value (45) to it
Option Explicit
、 Strict
、 Infer
詳細については、 この回答を参照してください。
-
Class
内またはModule
:
これらの変数(この文脈ではとも呼ばれるフィールド)の各インスタンスに対してアクセスすることができますClass
それらが宣言されている。彼らは、宣言の外部からアクセス可能であるかもしれないClass
修飾子(に応じてPublic
、 Private
、 Protected
、 Protected Friend
やFriend
)
Private x 'Declares a private field named x of type Object (invalid if Option Strict is On)
Public y As String 'Declares a public field named y of type String
Friend z As Integer = 45 'Declares a friend field named z of type Integer and assigns it the value 45
これらのフィールドはDim
で宣言することもできますが、意味は囲みタイプによって変わります:
Class SomeClass
Dim z As Integer = 45 ' Same meaning as Private z As Integer = 45
End Class
Structure SomeStructure
Dim y As String ' Same meaning as Public y As String
End Structure
修飾子
修飾子は、外部オブジェクトがオブジェクトのデータにどのようにアクセスできるかを示す方法です。
- パブリック
任意のオブジェクトが制限なしでこれにアクセスできることを意味する
- プライベート
宣言しているオブジェクトだけがこれにアクセスしてそれを見ることができることを意味する
- 保護された
宣言しているオブジェクトとそれを継承したオブジェクトのみがアクセスし、これを見ることができます。
- 友人
delcaringオブジェクト、それを継承するオブジェクト、および同じ名前空間内のオブジェクトのみを参照してこれを参照できます。
Public Class MyClass
Private x As Integer
Friend Property Hello As String
Public Sub New()
End Sub
Protected Function Test() As Integer
Return 0
End Function
End Class
関数の記述
関数は、実行中に何回か呼び出されるコードブロックです。同じコードを繰り返し書くのではなく、このコードを関数の中に書くことができ、必要なときにいつでもその関数を呼び出すことができます。
機能 :
- クラスまたはモジュールで宣言する必要があります
- 値を返します(戻り値の型によって指定されます)。
- 修飾語を持つ
- 処理を行うためのパラメータを取ることができる
Private Function AddNumbers(X As Integer, Y As Integer) As Integer
Return X + Y
End Function
関数名は、return文として使用できます
Function sealBarTypeValidation() as Boolean
Dim err As Boolean = False
If rbSealBarType.SelectedValue = "" Then
err = True
End If
Return err
End Function
ちょうど同じです
Function sealBarTypeValidation() as Boolean
sealBarTypeValidation = False
If rbSealBarType.SelectedValue = "" Then
sealBarTypeValidation = True
End If
End Function
オブジェクト初期化子
名前付き型
Dim someInstance As New SomeClass(argument) With { .Member1 = value1, .Member2 = value2 '... }
同等です
Dim someInstance As New SomeClass(argument) someInstance.Member1 = value1 someInstance.Member2 = value2 '...
匿名型(オプション推論はオンにする必要があります)
Dim anonymousInstance = New With { .Member1 = value1, .Member2 = value2 '... }
同様の
anonymousInstance
はsomeInstance
と同じ型を持っていませんがメンバ名は匿名型で一意でなければならず、変数や別のオブジェクトメンバ名から取得できます
Dim anonymousInstance = New With { value1, value2, foo.value3 '... } ' usage : anonymousInstance.value1 or anonymousInstance.value3
各メンバーの前に
Key
キーワードを付けることができます。これらのメンバーはReadOnly
プロパティになり、そのメンバーは読み取り/書き込みプロパティになりませんDim anonymousInstance = New With { Key value1, .Member2 = value2, Key .Member3 = value3 '... }
同じメンバ(名前、型、
Key
とオーダーの存在)で定義された2つの匿名インスタンスは、同じ匿名型を持ちます。Dim anon1 = New With { Key .Value = 10 } Dim anon2 = New With { Key .Value = 20 } anon1.GetType Is anon2.GetType ' True
匿名型は構造的に同等です。同じ
Key
値を持つKey
プロパティを少なくとも1つ持つ同じ匿名型の2つのインスタンスは等しいでしょう。あなたは使用する必要がEquals
使用して、それをテストする方法を=
コンパイルされませんとIs
オブジェクト参照を比較します。Dim anon1 = New With { Key .Name = "Foo", Key .Age = 10, .Salary = 0 } Dim anon2 = New With { Key .Name = "Bar", Key .Age = 20, .Salary = 0 } Dim anon3 = New With { Key .Name = "Foo", Key .Age = 10, .Salary = 10000 } anon1.Equals(anon2) ' False anon1.Equals(anon3) ' True although non-Key Salary isn't the same
Named型とAnonymous型の初期化子の両方を入れ子にして混在させることができます
Dim anonymousInstance = New With {
value,
Key .someInstance = New SomeClass(argument) With {
.Member1 = value1,
.Member2 = value2
'...
}
'...
}
コレクション初期化子
配列
Dim names = {"Foo", "Bar"} ' Inferred as String() Dim numbers = {1, 5, 42} ' Inferred as Integer()
コンテナ(
List(Of T)
、Dictionary(Of TKey, TValue)
など)Dim names As New List(Of String) From { "Foo", "Bar" '... } Dim indexedDays As New Dictionary(Of Integer, String) From { {0, "Sun"}, {1, "Mon"} '... }
同等です
Dim indexedDays As New Dictionary(Of Integer, String) indexedDays.Add(0, "Sun") indexedDays.Add(1, "Mon") '...
項目は、コンストラクタ、メソッド呼び出し、プロパティアクセスの結果になります。 Object初期化子と混在させることもできます。
Dim someList As New List(Of SomeClass) From { New SomeClass(argument), New SomeClass With { .Member = value }, otherClass.PropertyReturningSomeClass, FunctionReturningSomeClass(arguments) '... }
同じオブジェクトに対してオブジェクトイニシャライザ構文とコレクション初期化子構文を同時に使用することはできません。たとえば、これらは動作しません
Dim numbers As New List(Of Integer) With {.Capacity = 10} _ From { 1, 5, 42 } Dim numbers As New List(Of Integer) From { .Capacity = 10, 1, 5, 42 } Dim numbers As New List(Of Integer) With { .Capacity = 10, 1, 5, 42 }
カスタムタイプ
カスタム型を提供することで、コレクションのイニシャライザ構文を許可することもできます。
これは、実装する必要がありますIEnumerable
過負荷ルールによってアクセス可能と互換性が持っているAdd
の方法(例えば、共有、あるいは拡張メソッドを)考案された例:
Class Person Implements IEnumerable(Of Person) ' Inherits from IEnumerable Private ReadOnly relationships As List(Of Person) Public Sub New(name As String) relationships = New List(Of Person) End Sub Public Sub Add(relationName As String) relationships.Add(New Person(relationName)) End Sub Public Iterator Function GetEnumerator() As IEnumerator(Of Person) _ Implements IEnumerable(Of Person).GetEnumerator For Each relation In relationships Yield relation Next End Function Private Function IEnumerable_GetEnumerator() As IEnumerator _ Implements IEnumerable.GetEnumerator Return GetEnumerator() End Function End Class ' Usage Dim somePerson As New Person("name") From { "FriendName", "CoWorkerName" '... }
コレクション初期化子に名前を入れるだけでPersonオブジェクトを
List(Of Person)
に追加したい場合(ただしList(Of Person)クラスは変更できません)、Extensionメソッドを使用できます' Inside a Module <Runtime.CompilerServices.Extension> Sub Add(target As List(Of Person), name As String) target.Add(New Person(name)) End Sub ' Usage Dim people As New List(Of Person) From { "Name1", ' no need to create Person object here "Name2" }