Delphi语言学习8-类成员(字段和方法)

1.Class Fields

 

ContractedBlock.gif ExpandedBlockStart.gif Code
//例1 成员变量
type 
   TAncestor 
= class 
      Value: Integer; 
   
end

   TDescendant 
= class(TAncestor)
      Value: 
string;    // hides the inherited Value field 
   
end

var 
   MyObject: TAncestor; 
     
begin 
   MyObject :
= TDescendant.Create; 
   MyObject.Value :
= 'Hello!'     // error

  (MyObject 
as TDescendant).Value := 'Hello!'   // works! 
end;
//例2 静态字段
type
    TMyClass 
= class
      
public
        
class var        // Introduce a block of class static fields.
          Red: Integer;
          Green: Integer;
          Blue: Integer;
        
var              // Ends the class var block.
          InstanceField: Integer;
    
end;
//静态字段可以单独调用
TMyClass.Red :
= 1;
TMyClass.Green :
= 2;
TMyClass.Blue :
= 3;
//静态字段也可以通过对象实例调用
var
    myObject: TMyClass;
myObject.Red :
= 1;
myObject.Green :
= 2;
myObject.Blue :
= 3


2.Method Binding

 

ContractedBlock.gif ExpandedBlockStart.gif Code
//Static Methods
//例1
type 
    TFigure 
= class 
      
procedure Draw; 
    
end

    TRectangle 
= class(TFigure) 
      
procedure Draw; 
    
end;
var 
    Figure: TFigure; 
    Rectangle: TRectangle; 
          
    
begin 
            Figure :
= TFigure.Create; 
            Figure.Draw;              
// calls TFigure.Draw 
            Figure.Destroy; 
            Figure :
= TRectangle.Create; 
            Figure.Draw;              
// calls TFigure.Draw 

            TRectangle(Figure).Draw;  
// calls TRectangle.Draw 

            Figure.Destroy; 
            Rectangle :
= TRectangle.Create; 
            Rectangle.Draw;          
// calls TRectangle.Draw 
            Rectangle.Destroy; 
    
end;
//虚方法和动态方法
type 
    TFigure 
= class 
      
procedure Draw; virtual
    
end

    TRectangle 
= class(TFigure) 
      
procedure Draw; override
    
end;

    TEllipse 
= class(TFigure) 
      
procedure Draw; override
    
end;
var 
   Figure: TFigure; 
 
   
begin 
     Figure :
= TRectangle.Create; 
     Figure.Draw;      
// calls TRectangle.Draw 
     Figure.Destroy; 
     Figure :
= TEllipse.Create; 
     Figure.Draw;      
// calls TEllipse.Draw 
     Figure.Destroy; 
   
end;
//例2
type 
   T1 
= class(TObject) 
      
procedure Act; virtual
   
end

   T2 
= class(T1) 
      
procedure Act;   // Act is redeclared, but not overridden 
   
end

var
   SomeObject: T1; 

begin 
   SomeObject :
= T2.Create; 
   SomeObject.Act;    
// calls T1.Act 
end;
//类方法 Class Method
//Ordinary Class Methods
//The definition of a class method must begin with the reserved word class. For example, 
type 
  TFigure 
= class 
  
public 
     
class function Supports(Operation: string): Boolean; virtual
     
class procedure GetInfo(var Info: TFigureInfo); virtual
      
  
end;
//The defining declaration of a class method must also begin with class. For example, 
class procedure TFigure.GetInfo(var Info: TFigureInfo); 
begin 
     
end;
//Class Static Methods
type
   TMyClass 
= class
     strict 
private
       
class var
       FX: Integer;
         
     strict 
protected
    
       
// Note: accessors for class properties must be declared class static.
       
class function GetX: Integer; static;
       
class procedure SetX(val: Integer); static;

     
public
       
class property X: Integer read GetX write SetX;
       
class procedure StatProc(s: String); static;
   
end;
//调用
TMyClass.X :
= 17;
TMyClass.StatProc(
'Hello');




 

3.函数重载

 

ContractedBlock.gif ExpandedBlockStart.gif Code
type 
  T1 
= class(TObject) 
    
procedure Test(I: Integer); overloadvirtual;
  
end

  T2 
= class(T1) 
    
procedure Test(S: string); reintroduceoverload
  
end
   

SomeObject :
= T2.Create; 
SomeObject.Test(
'Hello!');       // calls T2.Test 
SomeObject.Test(
7);              // calls T1.Test

 

4构造函数

 

ContractedBlock.gif ExpandedBlockStart.gif Code
type 
   TShape 
= class(TGraphicControl) 
     
private 
       FPen: TPen; 
       FBrush: TBrush; 
       
procedure PenChanged(Sender: TObject); 
       
procedure BrushChanged(Sender: TObject); 
     
public 
       
constructor Create(Owner: TComponent); override
       
destructor Destroy; override
        
   
end

constructor TShape.Create(Owner: TComponent); 
begin 
    
inherited Create(Owner);     // Initialize inherited parts 
    Width :
= 65;          // Change inherited properties
    Height :
= 65
    FPen :
= TPen.Create;  // Initialize new fields 
    FPen.OnChange :
= PenChanged; 
    FBrush :
= TBrush.Create; 
    FBrush.OnChange :
= BrushChanged; 
end;

 

转载于:https://www.cnblogs.com/wxf82610/archive/2009/02/12/1389220.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值