11

注意:这不是 C# 属性简写的VB.NET 等价物的副本吗?. 这个问题是关于如何对VB自动属性的getter和setter具有不同的访问权限;例如public getter 和 private setter这个问题是关于自动属性的语法(并且没有提到这个问题)。


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

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

C# 代码

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

    public ICommand AddCommand {get;private set;}
}

来自代码转换器的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 源代码就会有很多这样的冗余。

4

3 回答 3

14

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

阅读 MSDN:https ://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/auto-implemented-properties


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

Public Property Prop2 As String = "Empty"
于 2012-12-29T19:38:54.357 回答
11

在 VB.NET 中是

Public ReadOnly Property Value As String

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

Me._Value = "Fred"
于 2018-12-05T09:10:38.420 回答
-1

由于上述答案成立,您可以引入公共道具来公开私人道具。这可能不是一个很好的解决方案,但与扩展的属性语法相比,代码仍然更少

Private Property internalprop as object
Public Readonly Property exposedprop as Object = internalprop
于 2018-06-28T09:00:41.920 回答