一尘不染

自动实现的getter和setter与公共领域

c#

我看到很多C#类的示例代码可以做到这一点:

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

或者,在较旧的代码中,具有明确的私有后备值且没有新的自动实现属性的情况相同:

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 class Point {
    public int x;
    public int y;
}

明确地说,当您需要对基础数据进行一些转换时,我理解了获取方法和设置方法的价值。但是在您只是传递值的情况下,这似乎是不必要的冗长。


阅读 212

收藏
2020-05-19

共1个答案

一尘不染

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

几年前,杰夫·阿特伍德(Jeff
Atwood)
处理了这个问题。他回顾性指出的最重要的一点是,从字段更改为属性是代码中的重大更改。任何消耗它的东西都必须重新编译才能与新的类接口一起使用,因此,如果控件之外的任何东西正在消耗您的类,则可能会遇到问题。

2020-05-19