【问题标题】:When making a class, why use a get/set for a property rather than just make it public? [duplicate]在创建类时,为什么要对属性使用 get/set 而不是将其公开? [复制]
【发布时间】:2014-10-30 04:44:24
【问题描述】:

第一种解决方案比第二种解决方案有什么优势?

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

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?

【问题讨论】:

  • 这个问题的答案遍布整个互联网和大多数面向对象的编程书籍。
  • @rufanov 我想指出我句子中的关键字:most,这意味着不是全部。

标签: c# .net oop


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2013-05-07
    • 2017-04-02
    • 2011-03-14
    • 2010-10-18
    • 2011-01-02
    相关资源
    最近更新 更多