我正在尝试使用自动实现的属性。 它显示我的错误
public OpenMode OpenFor
{
get;//must declare a body because it is not marked as abstract, partial or external. Why so
set
{
if (value == OpenMode.Add)
{
btnAddGuest.Text = "Save";
btnUpdatePreference.Visible = false;
dgvGuestInfo.ClearSelection();
}
else if (value == OpenMode.Update)
{
btnAddGuest.Text = "Update";
btnUpdatePreference.Visible = true;
}
}
}
答案 0 :(得分:4)
如果实现其中一个,则必须同时实现getter和setter。您只能自动实现两者:
public OpenMode OpenFor
{
get;
set;
}
您可以考虑使用支持字段:
private OpenMode openFor;
public OpenMode OpenFor
{
get
{
return openFor;
}
set
{
openFor = value;
//...
}
}
答案 1 :(得分:0)
自动实现仅适用于set和get没有自定义主体的简单用例
答案 2 :(得分:0)
使用get get;你需要使用刚设置;同样。在这种情况下,您将拥有一个隐式变量。当你为set声明一个body时,这不起作用。问问自己这个问题;你怎么能得到一些你永远无法设定的东西?
答案 3 :(得分:0)
private OpenMode _openFor;
public OpenMode OpenFor
{
get{return _openFor;}
set{
_openFor = value;
SetOpenFor(value);
}
}
private void SetOpenFor(OpenMode mode)
{
if (mode== OpenMode.Add)
{
btnAddGuest.Text = "Save";
btnUpdatePreference.Visible = false;
dgvGuestInfo.ClearSelection();
}
else if (mode == OpenMode.Update)
{
btnAddGuest.Text = "Update";
btnUpdatePreference.Visible = true;
}
}
答案 4 :(得分:0)
另请注意,自动实现的属性还会侦听访问修饰符:
public string Foo { get; private set; }
虽然您仍需要定义两者。
在您的示例中,看起来您不需要获取。您没有将值存储到本地字段中,因此看起来您的属性应该是一种方法。
或者,你的get可以从你在集合中修改的按钮的状态推断出值 - 但这开始变得愚蠢。