具有(主体或吸气剂)主体之一的属性

时间:2019-04-13 15:56:06

标签: c#

这个问题只是出于好奇。我有以下财产

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都提供主体,而为任何一个提供主体都出现错误呢?

2 个答案:

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