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

    请各位高手指教。
  • 相关阅读:
    pip相关工具使用小结
    PyCharm配置autopep8,自动格式化Python代码
    PyCharm运行Nosetests并导出测试报告
    Jenkins集成taffy进行自动化测试并输出测试报告
    Locust性能测试框架,从入门到精通
    浅谈如何打造一个安全稳定高效的容器云平台
    微服务治理平台的RPC方案实现
    这个需求我不接之事务的自动补偿
    微服务熔断隔离机制及注意事项
    容器化-Docker介绍
  • 原文地址:https://www.cnblogs.com/gamix/p/136414.html
Copyright © 2011-2022 走看看