private
    { Private declarations }
  public
    { Public declarations }
    UserName1: String;
  end;var
  FrmMain: TFrmMain;
  UserName2: String;
在上面的代码中,声明的UserName1和UserName2有什么区别???
我在实际使用中,好像在Public中声明的,在其他窗口中使用时,必须使用FrmMain.UserName1。
而在Var后面声明的,在其他窗口中使用时,直接使用UserName就可以了。请问一下,这两种声明有什么区别,实际使用过程中,用哪个比较好。

解决方案 »

  1.   

    ....怎么发了2次,而且还没答到点子上。
    这需要看实际情况了,如果你想使用那个窗体,就写在public里,如果想做全局变量,就写var下面.
    一般全局变量可以声明在一个公共的unit中
      

  2.   

    public
        { Public declarations }
        UserName1: String;//公共的类成员,要通过类的实例来访问,每个实例都可能是不同的值
      end;
    var
      FrmMain: TFrmMain;
      UserName2: String;//全局变量,引用单元后即可访问。值是唯一的。
      

  3.   

    书是很久没看了。只是记得,在private和public声明变量,然后哪些类可以访问,哪些类不可以访问。
    只是不记得在Var后面声明的是什么结果了。
    之前看的书是讲Java和.Net的。感觉Var后面声明变量在Java和.Net里面似乎没有对应的地方。
    应该是我粗略的理解了,没细研究。
      

  4.   

    一、UserName1这个是类里的一个变量,在public里,就是说其他类可以引用的,因此其他类里用要加类前缀。
    二、UserName2不属于任何类,是这个单元的全局变量,另一个单元引用了这个单元,那这个变量也成那个单元的全局变量。
      

  5.   

    很久前,也是不明白,为什么在主窗口声明的变量,有的需要加主窗口名,有的不需要加。
    而且放在Public和Var后面不知有什么区别,反正用起来是差不多的。
    书上又讲了一大堆Private和Public等的区别。
    程序主要是我写的,我想放哪就放哪,至少我知道哪些该用,哪些不该用。
    而且我们写的程序主要是和数据库打交道,明确的一点就是:能不调用别的窗口的东西,就不要调用。如果必须用,则尽量少调用。不然谁知道乱调用会有什么后果。
      

  6.   

    对于 implementation 之前, 非类内部出现的Var 是具用全局性的. 任何引用该单元的单元都可以直接访问对于 implementation 之后, 声明的 Var ,则对本单元具有全局性,在implementation 后任何方法中都可以访问如果是声明在 类内部的 Var变量 
    Private区 只能本单元访问
    Public区的 其它单元可以通过类名加点再加变量名方式访问
      

  7.   

    Sorry如果是声明在 类内部的 Var变量  
    Private区 只能本类访问
    Public区的 其它类可以通过类名加点再加变量名方式访问
      

  8.   

    按照面向对象来说:
    UserName1不要这样声明,要声明也要放在private里,外部访问通过在public声明一个属性来访问这个变量,这样:  private
        { Private declarations }
        FUserName1: String;    proceduce SetUserName1(const Value:string);
      public
        { Public declarations }
        property UserName1: String read FUserName1 write SetUserName1;
      end; 这样看起来麻烦了,但是好处不少,刚开始体会不到也没关系,代码写多了,就懂的这样做的好处,也就慢慢体会了面向对象一个重要概念“封装”,呵呵至于UserName2,这个全局变量,能不用就尽量不用。
      

  9.   

    UserName2这样声明的,我们主要是存放一些共用的变量,如用户名、电脑名……基本上很多窗口都会用到,这样声明会简单一点。
      

  10.   

      private
        { Private declarations }
      public
        { Public declarations }
        UserName1: String;//这是一个类的public变量,所以你要通过TFrmMain类的实例才能访问到它。所以你引用了这个单元后,还要用FrmMain.UserName1才能访问。
      end;var
      FrmMain: TFrmMain;
      UserName2: String;//这是全局变量。所以你引用了单元后,就可以直接访问它。java或.net中,没用var这种声明,因为java或.net中所有东西都必须放在类中。2种各有好处。一般来说,大中型程序中应该尽量避免UserName2这种写法,因为容易犯错并且不容易维护。比如你代码中有多处(几十处或更多)地方会改变UserName2的值,这样当你修改了其中一处的代码,其它地方也会受到影响。但是在比较简单的程序中无所谓,毕竟这样方便。