msil 笔记
public class TestImpl : ITest { // Properties public string Address { get { return "abc"; } } //msil:address不是在接口中定义的 //hidebysig:使用时看不见这个方法,因为是给属性用的.specialname也是说是给属性用的(但不指明),只是说是特殊的. .method public hidebysig specialname instance string get_Address() cil managed { .maxstack 1 .locals init ( [0] string str) L_0000: nop L_0001: ldstr "abc" L_0006: stloc.0 L_0007: br.s L_0009 L_0009: ldloc.0 L_000a: ret } public string Name { get { return "1"; } }
//name是在接定口定义的:
//多了newslot virtual final 这几个.
// .method public hidebysig specialname newslot virtual final instance string get_Name() cil managed { .maxstack 8 L_0000: ldstr "1" L_0005: ret } int ITest.Age { get { return 1; } set { } } //age是显示式实现的:
//不同点是用private修饰.其他的同上.get与set无区别. .method private hidebysig specialname newslot virtual final instance void System.Reflection.ITest.set_Age(int32 'value') cil managed { .override System.Reflection.ITest::set_Age .maxstack 8 L_0000: nop L_0001: ret } .method private hidebysig specialname newslot virtual final instance int32 System.Reflection.ITest.get_Age() cil managed { .override System.Reflection.ITest::get_Age .maxstack 1 .locals init ( [0] int32 num) L_0000: nop L_0001: ldc.i4.1 L_0002: stloc.0 L_0003: br.s L_0005 L_0005: ldloc.0 L_0006: ret } }
//c#中的:abstract
.method public hidebysig specialname newslot abstract virtual instance string get_Tel() cil managed { }
//C#中的virtual
.method public hidebysig specialname newslot virtual instance string get_Memo() cil managed { .maxstack 1 .locals init ( [0] string str) L_0000: nop L_0001: ldstr "" L_0006: stloc.0 L_0007: br.s L_0009 L_0009: ldloc.0 L_000a: ret }
|
普通类 |
实现接口 |
1.属性方法 |
.method public hidebysig specialname instance string get_Address() cil managed |
.method public hidebysig specialname instance newslot virtual final
string get_Name() cil managed |
2.显示实现 |
|
.method private hidebysig specialname instance newslot virtual final int32 System.Reflection.ITest.get_Age() cil managed |
3.Virtual |
.method public hidebysig specialname instance newslot virtual string get_普通Virtual属性() cil managed |
.method public hidebysig specialname instance newslot virtual final没了 string get_Memo() cil managed |
4.Abstract |
.method public hidebysig specialname instance newslot abstract virtual string get_普通Abstract属性() cil managed |
.method public hidebysig specialname instance newslot abstract virtual string get_Tel() cil managed |
5.New |
.method public hidebysig specialname instance 编译时直接优化掉了. string get_普通未覆盖基类属性() cil managed |
.method public hidebysig specialname instance newslot virtual final 与1相同 string get_接口NEW属性() cil managed |
|
.method public hidebysig specialname instance //天哪,覆盖基类中的new关键字只是个c#中的语法il不管这事,编译时将被调用方法直接找到了? string get_覆盖基类属性() cil managed
|
|
下面是ITest的定义.
public interface ITest { // Properties int Age { get; set; } string Name { get; } }
XAF开发成品案例参考
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
作者博客: http://www.cnblogs.com/foreachlife
欢迎加入CIIP框架\XAF技术应用交流群: 336090194 群文件中有更多相关工具及文档资料
转载请注明出处。多谢!
欢迎加我微信: admiralcn 或扫码:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
2016-08-25 没有技术说明文档的开源都是耍流氓:微软Roslyn编译即服务在CIIP中具体应用(上)