private至其后的另一个关键词之间为private区间,protected至其后的另一个关键词之间为protected区间...,依次类推。所有关键词均为可选,读者可全部使用,也可全部不使用或只使用其中的若干词。各词间无先后顺序。其各自的含义为:
1. strict private: 此区定义的字段或方法只能用于当前的类中。即T1中此区定义的成员只能在T1中使用。
2. strict protected:此区定义的成员除能用于当前类中,还可用于当前类的任何子类中。 以上两种成员,同一个类的不同对象间也不能互访问。
3. private:所限定的成员只能用于定义这个类的.pas文件或.dpr文件。
4. protected:相当于将private扩展到任意子类均可见。
5. public:对任何位置、任何类均可见。当某些成员未显式指定其访问权限时,Delphi默认为此public。
6. published:访问权限与public相同。
7. automated:用于Win32下的COM编程,在此不做介绍。 注意:strict private与strict protected从Delphi2007开始引入,之前的版本不存在这两种 等级
在 published published published 区声明属性时应注意以下两点: 区声明属性时应注意以下两点: 区声明属性时应注意以下两点: 区声明属性时应注意以下两点: 区声明属性时应注意以下两点: 区声明属性时应注意以下两点: 区声明属性时应注意以下两点:
 published published 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 属性的值只能是:有序类型、字符串接口变体方法指针以及上 下界在 下界在 0到 31 之间的集合类型。实数不能是 之间的集合类型。实数不能是 之间的集合类型。实数不能是 之间的集合类型。实数不能是 之间的集合类型。实数不能是 之间的集合类型。实数不能是 之间的集合类型。实数不能是 之间的集合类型。实数不能是 Real48Real48Real48 类型。 类型。
 不能以同一个名字公布两或更多的重载方法。 不能以同一个名字公布两或更多的重载方法。 不能以同一个名字公布两或更多的重载方法。 不能以同一个名字公布两或更多的重载方法。 不能以同一个名字公布两或更多的重载方法。 不能以同一个名字公布两或更多的重载方法。 不能以同一个名字公布两或更多的重载方法。 不能以同一个名字公布两或更多的重载方法。 不能以同一个名字公布两或更多的重载方法。 不能以同一个名字公布两或更多的重载方法。
6.

 

 

 

================

 

Delphi - 新语法之类相关的

 

技术交流,DH讲解.

今天就把Delphi新语法中与类相关都讲了.

静态系列.
静态成员变量,静态方法,静态属性.
静态方法只能使用静态成员变量或者其他常量.
一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type
  TMyClass = class
    strict private
      class var
        FX: Integer;
    strict protected 
        class function GetX: Integer; static;
    class procedure SetX(val: Integer); static;
    public
    class procedure StatProc(s: String); static;
        class property X: Integer read GetX write SetX;
  end;
 
TMyClass.X := 17;
TMyClass.StatProc('Hello');
静态属性的存取方法也要是静态的.

我们可以看到就是一个class关键字.

内部类.
内部类这个概念,我最早是在张孝祥的<<Java就业培训教程>>看见的.现在Delphi也支持这个了.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type
  TOuterClass = class
  strict private
    MyField: Integer;
  public
    type
            TInnerClass = class
        public
                MyInnerField: Integer;
            procedure InnerProc;
            end;
    procedure OuterProc;
  end;
 
procedure TOuterClass.TInnerClass.InnerProc;
begin
  ...
end;

至于这个有什么用,我也不是很清楚的.应该就是可见性上面的区别.

可见性.
在Delphi里面private里面东西,继承类,外部类都可以访问.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  THuangJacky = class
  private
    FName:string;
  end;
 
  TTheFiend = class(THuangJacky)
  public
    procedure SayMyName;
  end;
 
{ TTheFiend }
 
procedure TTheFiend.SayMyName;
begin
  ShowMessage(FName);
end;

肯定有人大呼,违反了面向对象,然后进行一轮批斗.
其实面向对象有很多弊端了.不然怎么很多框架核心地方都要用汇编来写,VCL里面很多代码为了效率也是用的汇编.
当然Delphi为了不落人口实,就加入了关键字Strict.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  THuangJacky = class
  strict private
    FName:string;
  end;
 
  TTheFiend = class(THuangJacky)
  public
    procedure SayMyName;
  end;
 
{ TTheFiend }
 
procedure TTheFiend.SayMyName;
begin
  ShowMessage(FName);//Error Here
end;

这样就回归正常了,当然还有strict protected,这样就符合面向对象了.
毕竟Delphi不像Java和C#那样是纯面向对象的.

终结.
不知道中文怎么说的来的,好久没有看C#入门经典了.
用sealed 修饰一个类,这个类就不能继承了.
用final修饰一个方法,这个方法就不能重写了override.
看例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
TAbstractClass = classabstract
public
  procedure Bar; virtual;
end;
 
TSealedClass = class sealed(TAbstractClass)
public
  procedure Bar; override;
end;
 
TFinalMethodClass = class(TAbstractClass)
public
  procedure Bar; override; final;
end;

继续驶向面向对象的彼岸的杰作.

好了,今天的主题就结束,接下来文章会介绍D2009后加入的泛型,匿名方法等.

我是DH,就到这里.

 
分类: Pascal语法

Delphi - 新语法之类相关的

 

技术交流,DH讲解.

今天就把Delphi新语法中与类相关都讲了.

静态系列.
静态成员变量,静态方法,静态属性.
静态方法只能使用静态成员变量或者其他常量.
一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type
  TMyClass = class
    strict private
      class var
        FX: Integer;
    strict protected 
        class function GetX: Integer; static;
    class procedure SetX(val: Integer); static;
    public
    class procedure StatProc(s: String); static;
        class property X: Integer read GetX write SetX;
  end;
 
TMyClass.X := 17;
TMyClass.StatProc('Hello');
静态属性的存取方法也要是静态的.

我们可以看到就是一个class关键字.

内部类.
内部类这个概念,我最早是在张孝祥的<<Java就业培训教程>>看见的.现在Delphi也支持这个了.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type
  TOuterClass = class
  strict private
    MyField: Integer;
  public
    type
            TInnerClass = class
        public
                MyInnerField: Integer;
            procedure InnerProc;
            end;
    procedure OuterProc;
  end;
 
procedure TOuterClass.TInnerClass.InnerProc;
begin
  ...
end;

至于这个有什么用,我也不是很清楚的.应该就是可见性上面的区别.

可见性.
在Delphi里面private里面东西,继承类,外部类都可以访问.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  THuangJacky = class
  private
    FName:string;
  end;
 
  TTheFiend = class(THuangJacky)
  public
    procedure SayMyName;
  end;
 
{ TTheFiend }
 
procedure TTheFiend.SayMyName;
begin
  ShowMessage(FName);
end;

肯定有人大呼,违反了面向对象,然后进行一轮批斗.
其实面向对象有很多弊端了.不然怎么很多框架核心地方都要用汇编来写,VCL里面很多代码为了效率也是用的汇编.
当然Delphi为了不落人口实,就加入了关键字Strict.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  THuangJacky = class
  strict private
    FName:string;
  end;
 
  TTheFiend = class(THuangJacky)
  public
    procedure SayMyName;
  end;
 
{ TTheFiend }
 
procedure TTheFiend.SayMyName;
begin
  ShowMessage(FName);//Error Here
end;

这样就回归正常了,当然还有strict protected,这样就符合面向对象了.
毕竟Delphi不像Java和C#那样是纯面向对象的.

终结.
不知道中文怎么说的来的,好久没有看C#入门经典了.
用sealed 修饰一个类,这个类就不能继承了.
用final修饰一个方法,这个方法就不能重写了override.
看例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
TAbstractClass = classabstract
public
  procedure Bar; virtual;
end;
 
TSealedClass = class sealed(TAbstractClass)
public
  procedure Bar; override;
end;
 
TFinalMethodClass = class(TAbstractClass)
public
  procedure Bar; override; final;
end;

继续驶向面向对象的彼岸的杰作.

好了,今天的主题就结束,接下来文章会介绍D2009后加入的泛型,匿名方法等.

我是DH,就到这里.

 
分类: Pascal语法