您应该在类中引用属性还是成员变量?

Wri*_*boy 5 c# properties .net-4.0

可能的重复:
是否应该通过属性访问同一类中的变量?

我最近遇到了这个问题,很好奇是否有某种标准,你应该在课堂上参考哪个标准。

我的意思是,无论您是直接访问成员变量还是通过属性(除非您需要避开一些自定义的 setter 代码),这都不应该有什么区别,但我想确保没有最佳实践。

partial class MyClass {
    private string foo;

    internal string Foo {
        get {
            return foo;
        }

        private set {
            foo=value;
            // I do other stuff
        }
    }

    public void DoSomething() {
        //Option 1;
        Foo="some string";

        //Option 2;
        foo="some string";
    }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 4

这不应该是你真正做出的选择。setter 中的代码要么应该运行,在这种情况下使用该属性,要么不运行,在这种情况下使用成员变量。在大多数情况下,一种是对的,一种是错的。在一般情况下,两者都不总是对/错,而且“无关紧要”的情况也是不寻常的。

例如,如果设置器代码正在触发“已更改”事件,您是否希望通知外部对象它已更改?如果您要更改它以响应先前的更改,可能不会(无限递归任何人?)如果不是,您可能想确保它被触发(这样您就不会更改值并且不会通知任何人更改)。

如果它只是验证所设置的值是否有效,那么要么您知道,在这种情况下,该值已经经过验证并且必须有效,在这种情况下无需再次验证;设置属性。如果您尚未验证要设置的内容,那么您希望运行验证逻辑,因此请使用该属性。