请教大家个问题,这个问题也是突然想到的,用了很久也没有发现。。
平常如果大家写个类
Type
  TA = class  end;在别的单元文件中引用这个单元,并且定义这个类
var
  A: TA正常来说我们就要创建
但是有时候没有创建也可以用,至少在我的程序中没有发现问题,不知道区别在那里
这个和TStringList差不多。
所以请教一下大家这个都是有什么区别?谢谢!

解决方案 »

  1.   

    var
      Form1 : Tform
    首先要說清楚,類沒有構先造出來沒有一個指定的變量去引用,他就是只是個類,不是對象(當然也有 With Tform.create  這樣的)上面的是全局變量,很多人習慣: form1 := Tform.create; 那麼其它單元引用了上面的單元再直接用FORM1那是可以的
      

  2.   

    你可以用类中的class修饰的类级别函数,这些函数不需创建实例即可访问
      

  3.   

    类级别函数可以通过TA.XXX来访问,如果你声明了A:TA,那么如果你想通过A去访问的话,就是1楼所说了
      

  4.   

    type
      tA = class
      public
        class function test():string;
      end;class function tA.test: string;
    begin
      Result:='Hello World';
    end;
      

  5.   


    我的意思是说,类都是创建才能使用的(除非是类方法)
    比如,一个类。自己写的。
    没有create,在别的单元直接声明后(不管是不是全局的)就可以直接使用
    而其create也是可以的。不知道我说明白了没有!
      

  6.   

    我明白各位的意思,我的意思是说
    比如
    一个类TA这个类没有类方法
    我用的时候
    要创建
    var
    A: TA
    begin
    A:TA.Create;
    A.XX
    end
    这个正常的使用
    但是如果这样
    var
    A: TA
    begin
    A.XX
    end
    也是可以的
    我想知道这有什么区别!
    呵呵
      

  7.   


    你的回答是我想要的。呵呵。那写的确是是一个类,如果判断是不是类?
    Type
      TA = class
      
      end这难道不是类吗?
      

  8.   

    type
      TA = class
    public
      function A : Boolean;
      class function B : boolean; 
    end; 你的是意思是上面的A這個函數在對象沒有創建情況可以訪問 ??
      

  9.   

    回 starluck  

    我就是这个意思
      

  10.   

    Delphi类实例的建立是为类中的数据字段分配内存,如果一个类没有数据字段,那么不用调用构造函数,就可使用且不会出错,如:type
      TMyClass = class
      public
        procedure Test;
      end;{ TMyClass }procedure TMyClass.Test;
    begin
      ShowMessage('Ok');
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      MyObj: TMyClass;
    begin
      MyObj.Test;
    end;
    但是如果把上面的例子改为:type
      TMyClass = class
      private
        x: Integer;
      public
        procedure Test;
      end;{ TMyClass }procedure TMyClass.Test;
    begin
      ShowMessage('Ok');
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      MyObj: TMyClass;
    begin
      MyObj.Test;
      Myobj.x := 100;
    end;那么就会出错了。即使当时不出错,退出应用程序时也会出现异常!
    为什么会这样?因为一个类是由数据和方法组成的,而类的方法和数据在内存分配是不一样的,类方法地址是固定的,类数据是可变的:每一个类实例都有不同的数据(地址),所有类都享有同样的方法。调用类的构造函数就是为类事例分配数据内存,如果一个类没有数据,不用构造也可调用其方法,这其实就相当于调用了一个一般的方法而已。
      

  11.   

     如果是 TA.B  直接訪問是正常的。 如果你直接訪問TA.A   ,沒有實例的情況下訪問那就真的要研究你的寫法了。
      

  12.   

    maozefa 朋友的说法是我想要的
    就是这个意思
    呵呵
    非常感谢你昂
    谢谢!!!也感谢其他的朋友
    谢谢!结贴