C#属性实际上是方法吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (57)

直到现在,我的印象是PropertiesMethods在C#中两个不同的东西。但后来我做了如下的事情。

为什么?

提问于
用户回答回答于

是的,编译器为属性生成一对GET和SET方法,以及自动实现属性的私有支持字段。

public int Age {get; set;}

相当于:

private int <Age>k__BackingField;

public int get_Age()
{
     return <Age>k__BackingField;
}

public void set_Age(int age)
{
    <Age>k__BackingField = age;
}
用户回答回答于

严格地说,属性不是方法,虽然他们都确实由getter和setter方法(也称为存取)的支持。当你编写这样的代码时(只要你修改代码来删除下面提到的编译错误)

myFoo.stringProp = "bar";

编译器实际上生成如下的IL代码:

ldstr       "bar"
callvirt    foo.set_stringProp

set_stringProp该属性的setter方法在哪里?事实上,如果你愿意,你可以通过反射直接调用这些方法。

但是,你发布的代码示例在Visual Studio的IntelliSense中可能看起来不错,但它不会编译。尝试构建项目,你将看到如下错误:

The type 'foo' already contains a definition for 'stringProp'

扫码关注云+社区

领取腾讯云代金券