具有公共getter和private setter的Auto Property

Til*_*lak 10 vb.net

注:这是不是重复VB.NET相当于C#属性的简写?.这个问题是关于如何在VB自动属性的getter和setter上拥有不同的访问权限 ; 例如公共吸气剂和私人二传手.那个问题是关于auto-property的语法(并没有提到这个问题).


我正在尝试将自动属性(公共 getter和私有 setter)从C#转换为VB.NET.

但转换后VB.NET正在维护一个私有字段.

C#代码

class DemoViewModel
{
    DemoViewModel (){  AddCommand = new RelayCommand(); }

    public ICommand AddCommand {get;private set;}
}
Run Code Online (Sandbox Code Playgroud)

VB.NET相当于从代码转换器

Class DemoViewModel
Private Sub New()
    AddCommand = New RelayCommand()
End Sub

Public Property AddCommand() As ICommand
    Get
        Return m_AddCommand
    End Get
    Private Set
        m_AddCommand = Value
    End Set
End Property
Private m_AddCommand As ICommand
End Class
Run Code Online (Sandbox Code Playgroud)

VB.NET代码生成私有后备字段.

是否有可能摆脱源代码中的这个后场(如c#)?怎么样?

没有这个功能,VB.NET源将有很多这样的冗余.

Ser*_*eyS 14

使用VB.NET,如果要为Get和Set过程指定不同的可访问性,则不能使用自动实现的属性,而必须使用标准或扩展的属性语法.

阅读MSDN:http://msdn.microsoft.com/en-us/library/dd293589.aspx


如果getter和setter 具有相同的可访问性,例如两者都是Public,则可以使用auto-property语法,例如:

Public Property Prop2 As String = "Empty"
Run Code Online (Sandbox Code Playgroud)


p3t*_*tch 10

在 VB.NET 中

Public ReadOnly Property Value As String
Run Code Online (Sandbox Code Playgroud)

然后要访问私有 setter,请在属性名称前使用下划线

Me._Value = "Fred"
Run Code Online (Sandbox Code Playgroud)