这个问题只是出于好奇。我有以下财产
public static int MyProperty {get;set;}
编译成功,但是当我编译
public static int MyProperty {
get
{
return 5;
}
set;
}
OR
public static int MyProperty {
get;
set
{
value = 10;
}
}
然后我得到了错误
'ClassName.MyProperty.set'必须声明一个主体,因为它不是 标记为抽象,外部或部分
和
'ClassName.MyProperty.get'必须声明一个主体,因为它不是 标记为抽象,外部或部分
分别。
我的问题是,为什么不向getter和setter都提供主体,而为任何一个提供主体都出现错误呢?
答案 0 :(得分:2)
因为使用此命令,{ get; set; }
被称为自动属性,它只是拥有后备字段的快捷方式。与此相同:
{
get { return _field; }
set { _field = value; }
}
但这不能同时用于两个部分。
答案 1 :(得分:2)
如果有属性,则任何属性都应该为其getter和setter定义逻辑。
空的getter或空的setter没有任何意义。
但是,当您定义这样的属性时:
public static int MyProperty { get; set; }
您告诉C#自动生成支持字段并用于简单的等效实现:
// This is actually what it means:
private static int _myProperty; // name for simplicity
public static int MyProperty
{
get { return _myProperty; }
set { _myProperty = value; }
}
或进一步扩展:
// This is actually what it means:
private static int _myProperty; // name for simplicity
public static int get_MyProperty()
{
return _myProperty;
}
public static void set_MyProperty(int value)
{
_myProperty = value;
}
当您使用一个自动获取器和编码设置器定义属性时,这实际上没有多大意义。您希望该物业的get
在此代码中做什么?
public static int MyProperty {
get;
set
{
value = 10;
}
}