刚写了个基于TComponent自定义类,遇到一个非常郁闷的情况,先把类简化如下:TMyCom = class(TComponent)
private 
  FTop: Integer;
published
  property Top: Integer read FTop write FTop;
end;我在程序中构造了一个基于该类的实例MyCom1,当我执行语句: Showmessage(inttostr(MyCom1.Top))时,返回的结果却是该实例在窗体中的Top值(也就是该实例的距窗体顶的高),而不是我在属性框里填入的值。我想问一下我自己定义的Top属性是否和什么有冲突呢?因为我如果把Top该成其他如:Top1,就不会有问题。但我很奇怪,从TComponent直接派生下来的类并没有Top属性呀?怎么产生冲突的呢?难道Top是关键字吗?

解决方案 »

  1.   

    你要看TComponent有个ReadTop和WriteTop过程,估计这里会和你的TOP冲突。
    TOP确实不要用,用起来别人也容易误会,建议用别的变量名吧。
      

  2.   

    可是没有直接和TOP这个单词挂上关系呀,我是担心以后还会出现其他类似的情况。不知道遇到这种情况该怎么分析好。
      

  3.   

    命名不要与已知的属性名冲突。
    如果你要重写它的数值,不如写个GetTop函数。
    private 
      FTop: Integer;
      function GetTop:Integer;
    published
    property Top: Integer read GetTop write FTop;function TMyCom.GetTop:Integer;
    begin
      Result:=FTop;
    end;