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   阳春三月  阅读(944)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2005-12-31 走好,我的2005。

导航

< 2008年12月 >
30 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

统计

点击右上角即可分享
微信分享提示