サーチ…


コメント

最初に興味深いのは、コメントを書く方法です。

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 ExplicitOnに設定されている場合)。変数を宣言する方法は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 ExplicitStrictInfer詳細については、 この回答を参照してください。

  • Class内またはModule

これらの変数(この文脈ではとも呼ばれるフィールド)の各インスタンスに対してアクセスすることができますClassそれらが宣言されている。彼らは、宣言の外部からアクセス可能であるかもしれないClass修飾子(に応じてPublicPrivateProtectedProtected FriendFriend

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
          '...
      }
    

    同様のanonymousInstancesomeInstanceと同じ型を持っていませんが

    メンバ名は匿名型で一意でなければならず、変数や別のオブジェクトメンバ名から取得できます

      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"
     }
    


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow