惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
Blog — PlanetScale
Blog — PlanetScale
Vercel News
Vercel News
L
LangChain Blog
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
About on SuperTechFans
博客园_首页
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
美团技术团队
V
V2EX

博客园 - 阳春三月

工作态度两则 泛型小经验 【转载】看图测性格 【转载】乔海燕-外科医生的手术技巧 记念 33-101 使用 MyMeta 组件获取数据库结构 获取 SQL Server 2005 中的元数据 看博客园文章的一点感想 事件与委托有别, delegate 与 Delegate 相异 - 阳春三月 伟大的 PL/Sql Developer——数据库结构比较 新年礼物:推荐小工具 abstract、virtual、override 和 new 在 IE 中承载 Winform 应用程序 安装 VS2008 SP1 后需要给 TFS2008 装 SP1 更新下载程序集缓存 尼康 P5100 的几张片子 吃油饼的男人 Linq error: Sequence contains no elements TFS 问题两则
C#属性的实质还是方法
阳春三月 · 2008-12-31 · via 博客园 - 阳春三月

    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# 中用属性这种形式实现,虽然用起来像字段,但不能忘了其实质还是方法。我遇到的问题只要把用到这个字段的程序集重新编译一遍即可解决,确实不需要修改代码。