在创建课程时,为什么要为属性使用get / set而不是仅仅将其公开?

时间:2014-10-30 04:44:25

标签: c# .net oop

第一种解决方案优于第二种解决方案的优势是什么?

class TestClass
    {
        public int value
        {
            get;
            set;
        }
    }
    static void Main()
    {
        var myTest = new TestClass();
        myTest.value = 3;
        System.Console.WriteLine(myTest.value);
    }
}

VS

class TestClass
    {
        public int value;
    }
    static void Main()
    {
        var myTest = new TestClass();
        myTest.value = 3;
        System.Console.WriteLine(myTest.value);
    }

我在SO上搜索这个问题,但我一直看到的最佳答案是,如果您需要更改如何设置/获取(添加验证或其他内容),您将无需返回代码并在使用属性的任何地方添加它。如果您确实需要添加此验证,那么您是否只能将其从示例二更改为示例一而无需任何其他更改?我的理解是,即使你想在get / set中添加一些验证,你也不能像我的例子那样使用自动生成的方式,无论如何都需要更改它。如果是这样的话,为什么甚至有get / set?

1 个答案:

答案 0 :(得分:-1)

Getters和Setter至少有两个常见用途:第一个是将c / c ++代码暴露给脚本语言(例如Lua),第二个是提供对可能非原子数据类型的线程安全原子访问(即,您提供首选线程安全机制的地方)。