【问题标题】:Getter Setter conventions [duplicate]Getter Setter 约定 [重复]
【发布时间】:2014-05-20 03:44:24
【问题描述】:

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

像这样:

public Dimension X { get; set; }

像这样:

Dimension _x;
public Dimension X
{
    get { return _x; }
    set { _x = value; }
}

甚至只是使用公共变量

public Dimension X;

如果我“相当”确定获取和设置的需求不会经常变化,那么在使用其中一种之前我应该​​考虑什么?

【问题讨论】:

    标签: c# getter-setter conventions


    【解决方案1】:

    您的第一个代码正在演示 Auto-implemented properties,这是 C# 3.0 引入的一个功能。这与您有支持字段的第二种方法相同。 (如果是自动实现的属性,编译器会添加支持字段)

    在 C# 3.0 及更高版本中,自动实现的属性使 没有附加逻辑时,属性声明更简洁 在属性访问器中需要(MSND)

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

    您的最后一个代码是针对公共字段的。它不同于公共财产。您可以查看此问题Public Fields versus Automatic Properties 了解更多详情。

    【讨论】:

      【解决方案2】:

      我的建议是永远不要使用第三个选项。仅通过 getter 和 setter 公开属性,以防您将来需要操作这些值。

      在其他两个选项中,如果您需要对值进行操作,那么支持变量是有意义的(您的第二个选项)。如果该属性是直接传入和传出的值,那么“自动”属性(您的第一个选项)简短而简洁,但仍然可以让您选择在未来拥有一个支持变量。

      【讨论】:

        【解决方案3】:

        基本上你必须使用

        Dimension _x;
        public Dimension X
        {
            get { return _x; }
            set { _x = value; }
        }
        

        当您计划添加一些额外操作时,例如

        Dimension _x;
        public Dimension X
        {
            get 
            {     
               // do more stuff here
               return _x; 
            }
        
            set 
            {
              // do more stuff here
               _x = value;     
            }
        }
        

        【讨论】:

        • arrrggg...请修复你的牙套。
        猜你喜欢
        • 2013-08-05
        • 2013-03-03
        • 1970-01-01
        • 1970-01-01
        • 2020-06-14
        • 2018-09-13
        • 2011-02-26
        • 2020-05-15
        相关资源
        最近更新 更多