为什么VB.NET属性的setter需要一个类型参数,为什么它是ByVal?

Nik*_*wal 12 c# vb.net

在C#中,属性的setter value关键字将自动与属性的类型相同.

例如,在C#中,类型valuestring

private string str = string.Empty;
public string MyText 
{
    get { return str; }
    set { str = value; }
}
Run Code Online (Sandbox Code Playgroud)

如果我们将此代码段转换为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
Run Code Online (Sandbox Code Playgroud)

问题

  1. 为什么set有这条线Set(ByVal value As String)?不应该自动将值类型设置为String.这条路.

    Private str As String = String.Empty
    Public Property MyText() As String
        Get
            Return str 
        End Get
        Set
            str = value
        End Set
    End Property
    
    Run Code Online (Sandbox Code Playgroud)

    有什么用?

  2. 我不能改变BYValByRef(我试过,提示错误),那有什么用之谓也?

slo*_*oth 9

可以省略(ByVal value As String)部分.Visual Studio将继续添加它,但语言和编译器都不需要它.

您可以使用除以外的参数名称value.另请注意,自VS2010 SP1起,您可以省略ByVal关键字.


例:

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
Run Code Online (Sandbox Code Playgroud)