• 关于装箱的一个问题


    在《.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

    请各位高手指教。
  • 相关阅读:
    http headers总结
    golang跨域配置
    Kafka中topic的Partition,Kafka为什么这么快,Consumer的负载均衡及consumerGroup的概念
    kafka partition(分区)与 group
    RocketMQ从部署到应用(Golang)
    Codeforces Round #706 (Div. 2)
    关于平衡树
    具体数学 第三章 整值函数
    FFT&NTT&多项式全家桶
    省选测试15
  • 原文地址:https://www.cnblogs.com/gamix/p/136414.html
Copyright © 2020-2023  润新知