c# - 自动实现的 getter 和 setter 与公共(public)字段

标签 c# oop properties field

我看到很多 C# 类的示例代码都是这样做的:

public class Point {
    public int x { get; set; }
    public int y { get; set; }
}

或者,在旧代码中,具有显式私有(private)支持值但没有新的自动实现的属性:

public class Point {
    private int _x;
    private int _y;

    public int x {
        get { return _x; }
        set { _x = value; }
    }

    public int y {
        get { return _y; }
        set { _y = value; }
    }
}

我的问题是为什么。执行上述操作与仅将这些成员设置为公共(public)字段(如下所示)之间在功能上有什么区别吗?

public class Point {
    public int x;
    public int y;
}

明确地说,当您需要对基础数据进行一些转换时,我理解 getter 和 setter 的值(value)。但在您只是传递值的情况下,它似乎不必要地冗长。

最佳答案

我倾向于同意(这似乎不必要地冗长),尽管这是我们团队尚未解决的问题,因此我们的编码标准仍然坚持所有类的冗长属性。

Jeff Atwood几年前处理过这个问题。他回顾指出的最重要的一点是,从字段更改为属性是一个 breaking change在你的代码中;任何使用它的东西都必须重新编译以使用新的类接口(interface),所以如果你控制之外的任何东西正在使用你的类,你可能会遇到问题。

关于c# - 自动实现的 getter 和 setter 与公共(public)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/111461/

相关文章:

c++ - = 运算符是否在 C++ 中调用构造函数/new?

php - 我可以在 Laravel 5.2 中创建一个继承自 User 的新类吗?

c# - 属性参数中的正则表达式约束抛出错误

c# - 带有修改其他插件的插件的基于插件的应用程序

c# - .Net SerialPort 对象不会通信

c# - 如何转换 'MS.Internal.Data.CollectionViewGroupInternal'使用?

c# - 数据提供者与存储库

ios - 为什么自动合成属性的 ivar 即使在属性设置后仍保持为零?

wpf - 从 XAML 设置 ViewModel 属性值

objective-c - 在 View Controller 之间传递字典