C#属性的实质还是方法

    C# 中类的属性,编译成中间语言后是 get、set 两个方法,调用属性实际上是调用 get 或 set 方法。

    这一点刚接触 C# 时就学到过,但没往心里去。今天修改了项目类库中的一个类,把原来一个公共字段用一个同名可读写的属性实现。本来想着在其它调用这个字段的地方,因为调用属性和调用字段语法完全一样,名字也没变,代码是不用改的。但却发现程序运行不了,提示找不到原来的那个字段。用 ildasm 打开新的程序集文件一看,顿时明白了怎么回事儿:属性的实质还是方法,get 对应名为“get_属性名”的方法,set 对应名为“set_属性名"的方法,这在 IL 代码中写的清清楚楚。调用属性的地方实际上是调用 get 或 set 方法。

    示例类:
public class Person
{
public string Name;
private int _age;
public int Age
{
get{ return _age; }
set{ _age = value; }
}
}
    用 ildasm 看到的:
 
    get 和 set 方法在 Java 中是司空见惯的,在 C# 中用属性这种形式实现,虽然用起来像字段,但不能忘了其实质还是方法。我遇到的问题只要把用到这个字段的程序集重新编译一遍即可解决,确实不需要修改代码。

posted on 2008-12-31 16:49  阳春三月  阅读(941)  评论(0编辑  收藏  举报

导航