注意: 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源将具有大量此类冗余。
答案 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