具有公共getter和private setter的Auto Property

时间:2012-12-29 19:29:12

标签: vb.net

注意: VB.NET equivalent of C# property shorthand? 不重复问题是关于如何在VB自动属性的getter和setter上拥有不同的访问权限;例如 public getter和private setter 那个问题是关于auto-property的语法(并没有提到这个问题)。


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

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

C#代码

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

    public ICommand AddCommand {get;private set;}
}

来自code converter的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

VB.NET代码生成私有支持字段。

是否可以在源代码中删除此后退字段(如c#)?怎么样?

如果没有此功能,VB.NET源将具有大量此类冗余。

3 个答案:

答案 0 :(得分:14)

使用VB.NET,如果您希望为获取和设置过程指定不同的可访问性,那么您不能使用自动实现的属性,而必须使用标准,或扩展的属性语法。

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


如果getter和setter 具有相同的辅助功能,例如两者都是Public,那么可以使用自动属性语法,例如:

Public Property Prop2 As String = "Empty"

答案 1 :(得分:2)

在VB.NET中是

Public ReadOnly Property Value As String

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

Me._Value = "Fred"

答案 2 :(得分:-1)

由于以上的回答都成立,因此您可以引入“公开提案”以公开“私有”提案。与扩展的Property语法相比,这可能不是一个很好的解决方案,但是代码更少。

Private Property internalprop as object
Public Readonly Property exposedprop as Object = internalprop