【问题标题】:The right way to define a custom object properties? [duplicate]定义自定义对象属性的正确方法? [复制]
【发布时间】:2017-03-23 20:26:36
【问题描述】:

我目前正在定义自定义对象属性如下:

private int count;
public int Count
{
    get { return count; }
    set { Count = value; }
}

我的第一部分问题是定义类似和类似的字段之间有什么区别:

private int count;
public int Count {get; set;}

除非你想像这样检查值:

private int count;
public int Count
{
    get { return count; }
    set
    {
        if (value >= 0)
        {
            count = value;;
        }
        else MessageBox.Show("Value is negative", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
    }
}

第二部分是有没有更好的方法在 C# 中定义对象属性?

【问题讨论】:

标签: c# object


【解决方案1】:

在您的第一个示例中,您定义了一个私有字段和一个属性来访问它。在您的第二个示例中,您定义了一个私有字段和一个 auto-属性,该属性具有它自己的支持字段。所以是的,是有区别的。

除非您需要自定义 get/set 逻辑,如最后一个示例,否则我会使用自动属性。但是,您不应该有单独的支持字段(因为它独立于属性),因此您的代码将是:

public int Count {get; set;}

在任何一种情况下(完全或自动);您正在使用在 C# 中定义属性的正确方法。我唯一要补充的是,如果您只有 get 属性,则可以在 C#6+ 中使用表达式主体成员:

public string Title => "Title"; //basically public string Title {get;} = "Title";

这可能比类似的属性高效,因为它不使用支持字段。

【讨论】:

  • 严格来说,表达式体属性并不完全等同于public string Title { get; } = "Title"。后者将产生一个只读的支持字段,该字段将存储字符串"Title",而前者不会创建支持字段。
  • @Kyle 谢谢,已修改以反映这一点。
猜你喜欢
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
相关资源
最近更新 更多