3

如果我有这样一个简单的类设置:

class MyClass
{
    private string _myName = string.Empty;

    public string MyName
    {
        get
        {
            return _myName;
        }
    }

    public void DoSomething()
    {
        // Get the name...
        string name = string.Empty;

        name = _myName;

        // OR

        name = MyName;

        // ...and do something with it...
    }
}

我应该使用哪个,公共属性或数据成员?

显然,在这个例子中它没有什么区别,因为它们都只是引用同一个变量。但是公共财产在现实世界中的用途呢?

一般来说,Public Properties 执行得很少,在这种情况下可以调用它们吗?或者人们是否将许多不应被内部类引用调用的功能放入他们的公共属性中?

我在另一篇文章中看到了一些关于没有将大量功能放入属性的内容,因为在调试器中检查它们可能会产生意想不到的结果。真的吗?

4

4 回答 4

8

使用该属性 - 任何可能封装在 setter 和 getter 中的逻辑都应该适用,即使在类本身中也是如此。如果 getter 和 setter 中没有逻辑,那么使用字段本身仍然不安全,因为如果在任何时候您希望围绕对这些字段的访问添加逻辑,您将不得不进行更多重构。

于 2009-07-02T18:39:28.630 回答
5

我认为您应该将该属性作为一般做法进行引用。虽然在这个特定的示例中它并没有太大的区别,但 get/set 访问器提供了在获取属性时做更多工作的能力。例如,我们的许多属性“get”访问器在更复杂的数据结构中执行一些查找,或者如果没有定义任何内容,则设置默认值。为了让类的其余部分可以利用这个逻辑,我们养成了使用属性的习惯。只是为了让我们不必考虑太多,我们尝试将实践概括。

在某些情况下,我们希望直接访问底层数据成员,但那是有特定原因的有意识的决定,而且往往是例外。

于 2009-07-02T18:42:39.233 回答
2

我更喜欢属性,因为它们很容易处理只读情况,并且很容易用你可能需要做的任何基本验证来包装它们。

于 2009-07-02T18:46:12.830 回答
0

如果我只是返回内部变量的值,我会将变量公开——这样做没有害处。当我想要对值的查看或更改做出响应时,我总是使用公共属性 - 即,将其写入数据库,也设置其他内容(如示例的第二部分)。

你要问的问题是你是否希望你的班级发生的事情来触发这些事件。如果你这样做了,就像外部调用者一样,然后通过属性访问值。如果您只想读取值,请使用内部变量。

要回答您的问题,无论哪种方式都没有害处 - 只需考虑潜在的副作用。

于 2009-07-02T18:40:27.380 回答