12

C# では、プロパティのセッターvalueキーワードは自動的にプロパティの型と同じになります。

たとえば、C# では、型valuestring

private string str = string.Empty;
public string MyText 
{
    get { return str; }
    set { str = value; }
}

このスニペットを VB.Net に変換すると、次のようになります。

Private str As String = String.Empty
Public Property MyText() As String
    Get
        Return str 
    End Get
    Set(ByVal value As String)
        str = value
    End Set
End Property

質問

  1. set にこの行があるのはなぜSet(ByVal value As String)ですか? 値の型が自動的に文字列になるべきではありません。こちらです。

    Private str As String = String.Empty
    Public Property MyText() As String
        Get
            Return str 
        End Get
        Set
            str = value
        End Set
    End Property
    

    それが何の役に立つの?

  2. に変更できません(試しBYValByRefみましたが、エラーが発生します)、それも何に役立ちますか?

4

5 に答える 5

9

その部分は省略でき(ByVal value As String)ます。Visual Studio はそれを追加し続けますが、言語にもコンパイラにも必要ありません。

以外のパラメータ名を使用できますvalueByValまた、VS2010 SP1 以降、キーワードを省略できることに注意してください。


例:

Class Test

    Private str As String = String.Empty

    Public Property MyText() As String
        Get
            Return str 
        End Get
        Set
            str = value
        End Set
    End Property

    Public Property MyText2() As String
        Get
            Return str 
        End Get
        Set(something As String)
            str = something
        End Set
    End Property

End Class
于 2012-09-12T07:37:09.717 に答える
2

Visual Basic の構文の一部だと思います。がオンでない場合は、データ型を省略できますOptionStrict。ただし、型を指定する場合は、プロパティの型と同じでなければなりません。

MSDN から - Set ステートメント (Visual Basic)


Option Strict が On の場合は必須です値パラメーターのデータ型。指定するデータ型は、この Set ステートメントが宣言されているプロパティのデータ型と同じでなければなりません。

于 2012-09-12T07:30:52.870 に答える
2

VBではパラメーターの名前変更できるため、次のようにします。

Public Property MyText() As String
    Get
        Return str
    End Get
    Set(ByVal val As String)
        str = val
    End Set
End Property

プロパティ パラメーターは値でのみ渡すことができるため、 ByValto を変更することはできません。ByRefしかし、VB は変更不可能な事実を述べるのを好む場合があります。

開発者(理論的には)次のものを使用できるようにすることができました。

Set(val)

他に変更できるものはないからです。Functionしかし、プロパティのパラメータをs およびs のパラメータに似せることを選択しましたSub


実際、パラメーターを指定する必要はまったくありません。VB 言語仕様 (9.7.2) によると:

パラメーター リストが指定されている場合、1 つのメンバーが必要であり、そのメンバーには 以外の修飾子がなくByVal、その型はプロパティの型と同じである必要があります。パラメータは、設定されているプロパティ値を表します。パラメータが省略された場合、指定されたパラメータValueが暗黙的に宣言されます

そして (9.5.2):

を指定しない、ByRefまたはByValデフォルトで に設定されるパラメータByVal

于 2012-09-12T07:36:05.597 に答える
1

値が ByRef の場合、Setter は呼び出し元の値を変更できます。プロパティ セッターがこのような副作用を引き起こすことを許可するのは意味がありません。

于 2012-09-12T07:38:20.400 に答える
0

値を列挙型にして、たとえば選択ケースを実行し、そのように値を設定できます。プロパティの set 呼び出しを、同じ値の型のみを渡すように制限する必要はありません。これは優れた機能です。

于 2012-09-12T17:22:01.807 に答える