.net - 通过访问器或直接访问同一类的属性的最佳方法是什么?

标签 .net class properties oop accessor

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

8年前关闭。




Improve this question




这是我不太一致的事情,并且总是对其他人的所作所为感到好奇。

您如何访问内部属性(私有(private)或公共(public))?

例如你有这个属性:

Private _Name As String

Public Property Name() As String
    Get
        Return _Name
    End Get
    Set(ByVal value As String)
        _Name = value
    End Set
End Property

在另一个函数中的同一类中,您更喜欢哪一个?为什么?
_Name = "Johnny"

或者
Name = "Johnny"

忽略我使用 Name 而不是 Me.Name 的事实。

最佳答案

就个人而言,我更喜欢尽可能使用该属性(property)。这意味着您仍然可以获得验证,并且您可以轻松地在属性访问上设置断点。这在您尝试更改两个相互验证的属性时不起作用 - 例如,“最小和最大”对,其中每个属性都有一个验证约束,使得 min <= max每时每刻。你可能有(C#):

public void SetMinMax(int min, int max)
{
    if (max > min)
    {
        throw new ArgumentOutOfRangeException("max";
    }
    // We're okay now - no need to validate, so go straight to fields
    this.min = min;
    this.max = max;
}

在 future 的某个时候,我希望看到 C# 能够在属性中声明支持字段,使其仅对属性私有(private):
public string Name
{
    string name;

    get { return name; }
    set
    {
        if (value == null)
        {
            throw new ArgumentNullException("value");
        }    
        name = value;
    }
}

在酒店外,您将无法访问 name根本就只有Name .我们已经为自动实现的属性提供了这个,但它们不能包含任何逻辑。

关于.net - 通过访问器或直接访问同一类的属性的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/355787/

相关文章:

c# - Winforms:如何加速 Invalidate()?

.net - 为什么 System.Object 在 .NET 中不是抽象的?

android - 无法使用2种以上的布局

C++ 重载运算符 << 让我做噩梦

python - 如何在 Python 中为实例分配属性?

.net - .NET 4.0 代码可以与 .NET 2.0 代码互操作吗?

c# - 生成 xml 日志的日志记录组件

C++ 使用 { } 初始化成员变量

Python - 缓存一个属性以避免 future 的计算

Spring - 从 JNDI 设置属性值