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; }
} 

 

posted @ 2017-08-25 22:48  code first life  阅读(321)  评论(0编辑  收藏  举报