zoukankan      html  css  js  c++  java
  • 关于装箱的一个问题

    在《.NET框架程序设计》中有这样的一个例子:

    using System;

    struct Point : ICloneable
    {
        
    public Int32 x, y;

        
    public override String ToString()
        
    {
            
    return String.Format("({0}, {1}", x, y);
        }


        
    public Object Clone()
        
    {
            
    return MemberwiseClone();
        }

    }


    public class App
    {
        
    public static void Main()
        
    {
            Point p;
            p.x 
    = 10;
            p.y 
    = 20;

            Console.WriteLine(p.ToString());
            Console.WriteLine(p.GetType());

            Point p2 
    = (Point)p.Clone();
            ICloneable c 
    = p2;

            Object o 
    = c.Clone();

            p 
    = (Point)o;
        }

    }


    里面提到p在执行ToString方法的时候不会发生装箱。通过看IL代码确实是这么回事,但是再去查看Point的ToString方法的IL代码,发现在其中进行了装箱操作,那么是不是总的说来还是进行了装箱操作呢?

    IL代码如下:

    .method public hidebysig virtual instance string
            ToString() cil managed
    {
      // Code size       37 (0x25)
      .maxstack  3
      .locals init (string V_0)
      IL_0000:  ldstr      "({0}, {1}"
      IL_0005:  ldarg.0
      IL_0006:  ldfld      int32 Point::x
      IL_000b:  box        [mscorlib]System.Int32
      IL_0010:  ldarg.0
      IL_0011:  ldfld      int32 Point::y
      IL_0016:  box        [mscorlib]System.Int32
      IL_001b:  call       string [mscorlib]System.String::Format(string,
                                                                  object,
                                                                  object)
      IL_0020:  stloc.0
      IL_0021:  br.s       IL_0023
      IL_0023:  ldloc.0
      IL_0024:  ret
    } // end of method Point::ToString

    请各位高手指教。
  • 相关阅读:
    Android Studio git 使用
    LInux tty 非阻塞配置以及安全读取数据方法
    Android JNI LOG 打印
    Android APP JNI 编写
    插件地址
    Linux 设置默认路由
    Linux Shell 判断语句
    ORACLE存储过程创建失败,如何查看其原因
    ORACLE时间函数(SYSDATE)深入理解
    JS中,如何判断一个数是不是小数?如果是小数,如何判断它是几位小数 保留n位小数
  • 原文地址:https://www.cnblogs.com/gamix/p/136414.html
Copyright © 2011-2022 走看看