可以理解为C中UNION。即0和1共享同一块内存。由于TPoint所占用的内存恰好是两个Integer,所以Left,Top和TopLeft等价。同理Right,Bottom和BottomRight等价。
又由于TPoint由x,y组成,所以TopLeft.x实际上就是Left所占有的内存,正因为这样,所以定义不会发生任何冲突。
同样的概念,Delphi在Messages单元,大量的重定义了各种消息结构。

解决方案 »

  1.   

    chechy,多谢你详细透彻地解释了"共享同一块内存",50分先送了.
    但还请补充说明一下,case integer或case 枚举类型,然后总是从0,1...
    列举各种情况,每种情况都共享同一块内存,这是不是一种约定呢?我想不太通的(其实是有点不习惯)是为什么不是另一种列举格式,因为case的常用方式是case 有序变量,其中变量是有赋值的,
    按这种方式,则么判断可变记录中integer的值何时是0,何时是1...期待您的答案!:)
      

  2.   

    上面这种枚举实际上只是形式上的,敷衍语法的。因为Case中的Integer根本就没有变量指示,你无法访问。不过由于0,1的中所占内存相同,且访问任意一块都能得到正确的值,所以即使又指示的变量也是多余的。
    还有一种,就是传统的类似于C中的UNION,用来节约内存的,这是通常需要指示的变量,来表明内存中到的是多少。比如
    TTest = record
      case testtype:Integer of
        0:(a: Integer);
        1:(b: Double);
        2:(c: string[10]);
    end;