VB.Net属性 - 公共获取,私有集

Rid*_*Dev 65 vb.net scope properties

我想我会问...但是有没有办法让公共部分属性可用,但保持私有?

否则我认为我需要两个属性或属性和方法,只是认为这将更清洁.

JDu*_*ley 113

是的,非常直截了当:

Private _name As String

Public Property Name() As String
    Get
        Return _name
    End Get
    Private Set(ByVal value As String)
        _name = value
    End Set
End Property
Run Code Online (Sandbox Code Playgroud)

  • 有关信息,此功能是在发布.Net Framework的v2.0的同时引入VB的. (2认同)

Bre*_*eze 22

我不确定Visual Studio所需的最低版本是什么,但在VS2015中你可以使用

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

它对于公共访问是只读的,但可以使用私有修改 _Name

  • @答案中提到的@ Brain2000你可以在类中使用属​​性名称前面的下划线设置属性.遗憾的是,intellisense不知道这一点. (4认同)
  • "ReadOnly"的问题在于您无法在类中设置属性.当您将该集标记为受保护或私有时,您可以在类中进行设置,从而提供良好的控制级别.我希望您可以指定两个范围,例如"Public Private Property Name As string"作为简写. (2认同)

Dan*_*Dan 7

    Public Property Name() As String
        Get
            Return _name
        End Get
        Private Set(ByVal value As String)
            _name = value
        End Set
   End Property
Run Code Online (Sandbox Code Playgroud)

  • 你迟到了五分钟;-) (5认同)

Mas*_*Net 6

另外一个值得一提的调整:我不确定这是否是.NET 4.0或Visual Studio 2010功能,但是如果你同时使用它们,则不需要为setter/mutator代码块声明value参数:

Private _name As String

Public Property Name() As String
    Get
        Return _name
    End Get
    Private Set
        _name = value
    End Set
End Property
Run Code Online (Sandbox Code Playgroud)


Ada*_*m H 5

我发现将其标记为比上述答案property更干净。readonly我相信需要vb14。

Private _Name As String

Public ReadOnly Property Name() As String
    Get
        Return _Name
    End Get
End Property
Run Code Online (Sandbox Code Playgroud)

这可以压缩为

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

https://msdn.microsoft.com/en-us/library/dd293589.aspx?f=255&MSPPError=-2147217396