关于c#:Getter Setter约定

Getter Setter conventions

本问题已经有最佳答案,请猛点这里访问。

在C中,我以不同的方式创建属性。

这样地:

1
public Dimension X { get; set; }

像这样:

1
2
3
4
5
6
Dimension _x;
public Dimension X
{
    get { return _x; }
    set { _x = value; }
}

甚至只是使用一个公共变量

1
public Dimension X;

如果我"相当"确定获取和设置的需求不会经常改变,那么在使用之前应该考虑什么?


您的第一个代码是演示自动实现的属性,这是C 3.0引入的一个特性。这与第二种方法相同,其中您有一个支持字段。(如果是自动实现的属性,编译器将添加支持字段)

In C# 3.0 and later, auto-implemented properties make
property-declaration more concise when no additional logic is
required in the property accessors. (MSND)

当您在getset中有一些自定义逻辑时,支持字段很有用,但是如果您在getter或setter中没有任何逻辑,那么使用自动实现的属性就可以了。

最后一个代码是针对公共字段的。它不同于公共财产。您可以看到这个问题公共字段与自动属性,以了解更多详细信息。


基本上你必须使用

1
2
3
4
5
6
Dimension _x;
public Dimension X
{
    get { return _x; }
    set { _x = value; }
}

当你计划添加一些额外的动作时,比如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dimension _x;
public Dimension X
{
    get
    {    
       // do more stuff here
       return _x;
    }

    set
    {
      // do more stuff here
       _x = value;    
    }
}


我的建议是永远不要使用第三个选项。只有在将来需要操作值时,才通过getter和setter公开属性。

在其他两个选项中,如果需要对值进行操作,那么后备变量是有意义的(您的第二个选项)。如果属性是值的直接传入和传出,则"自动"属性(第一个选项)简短而简洁,但仍为您提供在将来具有支持变量的选项。