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

    请各位高手指教。
  • 相关阅读:
    自己的第一个网页
    第一次爬虫测试
    科学计算与可视化
    python自顶向下的设计方法进行体育竞技分析
    python PIL库的相关操作
    python 关于身份证号码的相关操作
    jieba库
    汉诺塔
    Django项目中运行Scrapy项目
    **Django+Echart实现多个饼状图(echart数据格式问题 {value: 135, name: '视频广告'})
  • 原文地址:https://www.cnblogs.com/gamix/p/136414.html
Copyright © 2011-2022 走看看