我目前正在定义自定义对象属性,如下所示:
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#中定义对象属性?
答案 0 :(得分:2)
在第一个示例中,您定义了一个私有字段和一个属性来访问它。在第二个示例中,您定义了一个私有字段和 auto -property,其中具有自己的支持字段。所以是的,存在差异。
除非您在最后一个示例中需要自定义get/set
逻辑,否则我将使用auto-property。但是,你不应该有一个单独的支持字段(因为它独立于属性),所以你的代码就是:
public int Count {get; set;}
在任何一种情况下(完整或自动);您正在使用在C#中定义属性的正确方法。我唯一要补充的是,如果你只有get
属性,你可以在C#6 +中使用表达式身体成员:
public string Title => "Title"; //basically public string Title {get;} = "Title";
这可以更多效率,因为它没有使用支持字段。