unit UMain;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBClient, MConnect, SConnect, StdCtrls;type
  TForm1 = class(TForm)
    //相当于PUBLIC ,TFORM1实例化以后其它PAS可见
    ClientDataSet1: TClientDataSet;
    Button1: TButton;
    Edit1: TEdit;
    SocketConnection1: TSocketConnection;
    Button2: TButton;
    //对象自带的过程声明在此列出
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    //以下为自定义的过程/方法/变量的声明
  private
   //在只本单元可见,在别的单元TFORM1的子类中不可见,在本单元中TFORM1的子类中可见
    { Private declarations }
     pTestString:string;
     function  PrivateFun:string;
  public
   //在TFORM1实例化以后,以下的方法、过程、变量在别的单元可见,实例化之前不可见
    pubTestString:string ;
    //但是在方法前加CLASS 即成为类方法 相当于JAVA中的STATIC方法在实例化之前却可见
    class function Classfun:string;//实例化前就可访问
    function PublicFun:string;//实例化后可访问
    function SameNameFun:string; //实例化可以访问
    { Public declarations }
  end;
  //^^^^^在别的单元对以上方法/过程/变量的引用都得加上"类名."的前缀 也就是"tform1."
  // 除类访问外,其它的方法/过程/变量 都得在tform1实例化以后才可以访问
  //vvvvvvvvv以下为全局部分也就是说与TFORM1类没有关系,但与单元名有关系.
  //在别的单元对以下的方法/过程/变量的引用,可以不用加前缀直接使用,
  //但当方法/过程/变量的标识符与单元本身中的标识符相同时,则要加"单元名."
  //的前缀来特指
  function pfunTest:integer;  //别的单元可以访问var
  Form1: TForm1;
  gTestString:string;
var a:integer;//以上为声明部分, 以下为实现部分;对于方法/过程的实现都在IMPLEMENTATION下面
implementationuses Ulogin;{$R *.dfm}
     //在实现部分定义的变量,只有本单元可见
var imTestString:string;// 在实现部分定义的方法/过程的可见性取决于上面声明部分是否对其进行相应的声明
function  PfunTest:integer;//别的单元可以访问,因为上面声明了.
 //实现在全局部分声明的方法时,方法名前不要加"TFORM1."类名前缀
begin
  result:=4;
end;function tform1.publicFun:string; //本单元及其它单元在tform1实例化之后,才可访问
begin
  result:='publicFun';
end;function  impFunTest1:String; //只有本单元可以访问
begin
  result:='in implementation';
end;
function tform1.PrivateFun:string; //只有本单元可以访问,因为它是受保护的
  //在本单元中TFORM1的子类可以访问,其它单元中TFORM1的子类不能访问
  begin
    result:='privateFun';
  end;
class function  tform1.classFun:string; //本单元及其它单元在tform1实例化之前就可访问,
    begin
      result:='classfun';
    end;
function SameNameFun:string; //只在本单元可以访问
  begin
    result:='sameNameFun';
  end;
function tform1.SameNameFun:string;//实例化后,可以访问
  begin
    result:='tform1.sameNameFun';
  end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 //在实现部分,局部方法名可以与TFORM1类中的方法名相同
 //但在TFORM1类中(如事件中)不加前缀对同名方法的访问,将默认调用TFORM1类中的方法
 // 这相当于JAVA类中的"就近访问"    showmessage(samenamefun);
end;procedure TForm1.Button2Click(Sender: TObject);
begin //,若要指定访问局部的同名方法,则必须在方法名前加上单位名前缀如(unit1.)
   showmessage(umain.SameNameFun);
end;end.