如何在C#中实现自动实现的属性来设置值

时间:2010-06-04 09:04:19

标签: c# .net properties

我正在尝试使用自动实现的属性。 它显示我的错误

    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;
            }
        }
    }

5 个答案:

答案 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可以从你在集合中修改的按钮的状态推断出值 - 但这开始变得愚蠢。