【问题标题】:Visual Basic: Read only Visability of Structure membersVisual Basic:结构成员的只读可见性
【发布时间】:2015-12-11 21:24:27
【问题描述】:

好的,所以这是在我之前提出的涉及结构和类的问题之后进行的。所以引用this question(我现在使用类作为基础)我有一个类的成员是一个数组(我知道我必须在没有维度的情况下声明它)作为构造函数的一部分我希望它定义数组的维度。当我最初尝试执行ReDim 时,编译器很不高兴,因为我将成员声明为ReadOnly。虽然我对阵列所做的事情有它自己的可行性问题,但这不是我要问的,因为它提出了一个我必须首先回答的不同问题。

有没有办法让类/结构的成员只能在类/结构之外读取,但可以在类/结构中进行修改,而无需使用属性或内部函数/子来获得读取访问权限?

基本上就像将成员声明为私有,但您至少可以在类/结构之外读取成员。仅此而已。

【问题讨论】:

  • 这正是属性的用途。为什么不想使用属性?
  • 嗯,我猜这真的是出于语义原因。即使该成员是私有的,它仍然是可见的,但你不能对它做任何事情。因此,当您使用该属性时,您必须给它一个与您使用它来访问的成员不同的名称。似乎是一个不必要的并发症。
  • 是的。如果只有 VB.NET 支持自动实现属性的 C# 语法,允许您指定私有设置器。不过,在这里使用属性听起来是正确的做法。

标签: vb.net class structure member readonly


【解决方案1】:

你可以这样做

Private _some As String
Public Property Some As String
    Get
        Return _some
    End Get
    Private Set(value As String)
        _some = value
    End Set
End Property

【讨论】:

    【解决方案2】:

    没有。就其本身而言,没有办法将类字段设为公开以供阅读,而将其设为私有以供写入。字段上的可访问性修饰符会影响读取和写入。

    做你想做的最干净的方法是在你的类中定义一个私有字段,并定义一个公共属性getter:

    Private _dummy As String
    
    Public Property Dummy() As String
        Get
            Return _dummy
        End Get
    End Property
    

    当然,能够更简洁地表达这一点会很好,就像 C# 使用自动实现的属性一样:

    public string Dummy {get; private set;}
    

    【讨论】:

    • 谢谢。我有点想这将是答案,但我想在我完全放弃之前我会问。
    猜你喜欢
    • 2010-11-17
    • 2012-05-26
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多