zoukankan      html  css  js  c++  java
  • 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; }
    } 
  • 相关阅读:
    MySQL经典练习题(四)
    MySQL经典练习题(三)
    MySQL经典练习题(二)
    MySQL经典练习题(一)
    MySQL经典练习题-数据准备
    表连接
    子查询
    MySQL中函数分类
    排序
    数据分组
  • 原文地址:https://www.cnblogs.com/foreachlife/p/msil1.html
Copyright © 2011-2022 走看看