定义一个类TTest以及一个过程test(过程里没有引用类的任何变量。变量可以是局部变量,也可以是其他类变量)和类对象testobj。没有创建testobj,但是可以引用过程:testobj.test编译通过并且可以执行。但是如果test里引用了TTest类定义的变量就会报错?哪位高手给解释下?

解决方案 »

  1.   

    type
      TTest = class
      public
      procedure test();……
      TTest.test();
      var
        temp//任何类型的局部变量
      begin
      
        temp := ……//对局部变量操作。
        otherclassvar := …… 对其他类成员变量操作
      end;
    //外部调用test
    var
      testobj: TTest;//声明TTest对象
    begin
      testobj.test; end;
    以上程序编译通过并执行。
    如果在TTest中定义成员变量,则在test中引用该类的成员变量就报错。为什么呢?应该两次都报错的啊?
      
      

  2.   

    类方法 ,其实就是和你写的独立的方法,函数是一样的,只是写成类方法的话可以更明确的知道这些方法是和这个类有关系的,当然你也可以写成没有关系,我觉得它最大的好处就是将独立的函数分类了,只是方便了使用者记忆和分类.如type 
     /自己将一些常用的操作ListView TreeView的方法写成了函数。方便使用。
      function ListView_Del
      function ListView_Find
      function ListView_Move
      function TreeView_Del
      function TreeView_Find
      function CreateGUIDToStr //得到一个GUID字符串
      这样的写法将一些功能完全不同的函数都混在了一起。
      但这样的写法就象当初没有对象,只是函数的编程方式。现在写成这样更清晰一些  TWinControlFun=class //和界面控件有关的方法
         class function ListView_Del
         class function ListView_Find
         class function ListView_Move
         class function TreeView_Del
         class function TreeView_Find
      end;  TMyCommand=class //一些基础的
        class function CreateGUIDToStr
      end;
      
    调用的时候 TWinControlFun. ListView_Del 可以利用编译器的提示功能,方便输入不容易出错。
      

  3.   

      var
      temp//任何类型的局部变量
      begin
       
      temp := ……//对局部变量操作。
    与类方法没关系,这个是任何函数都可以有的,类方法当然也可以有类方法不可以有
    otherclassvar := …… 对其他类成员变量操作
    因为此时没有任何类实例,所以也就无法访问任何otherclassvar
      

  4.   

    谢谢sz_haitao兄以及ZyxIp兄的解答
    不过,这里的otherclassvar 是指其他的类的类成员变量,不是TTest类。而不是说otherclassvar 是TTest类的成员变量
      

  5.   

    我发现ZyxIp兄的说法其实还是用类去引用方法。虽然方法不是静态的仍能被引用让我很糊涂。
    我的问题是声明一个类的对象,但又没有用该类的构造函数(额,这里没有定义类的构造函数。不知道定义类的构造函数是否还会这样。)去创建这个对象,就使用这个对象引用了该类的方法,而程序不会报错。
    就像sz_haitao兄说的,没有任何类实例,应该是无法引用该类的非静态方法的。但是程序却能正常执行。而如果在方法中引用了该类定义的变量则肯定报错。
    为什么会有这种差别呢?
    能否用类在计算机中实例化过程解释?我只知道对象实例化的时候拷贝了类的所有东东,然后给了指向这个对象的指针。
      

  6.   

    如果一个类中有类方法,那这个类方法调用的时候可以用TTest.类方法,也可以用 TTest.Create.类方法。