Difference between revisions of "extended class syntax"

From Free Pascal wiki
Jump to navigationJump to search
(New page: <delphi> type TSomeClass = class private type TSomeType = type integer; // an internal type class var FSomeClassVar: TSomeType; // class variable belongs to a...)
 
Line 1: Line 1:
 +
static fields, static properties, regular fields and regular properties:
 
<delphi>
 
<delphi>
 
type
 
type
Line 27: Line 28:
 
   SomeClass.SomeProperty := 1;
 
   SomeClass.SomeProperty := 1;
 
   WriteLn(SomeClass.SomeProperty);
 
   WriteLn(SomeClass.SomeProperty);
 +
end.
 +
</delphi>
 +
 +
class constants:
 +
 +
<delphi>
 +
type
 +
  TSomeClass = class
 +
  strict private
 +
    const
 +
      PrivateConst = 1;
 +
    type
 +
      PrivateType = type Integer;
 +
    var
 +
      FPrivateField: PrivateType;
 +
  public
 +
    procedure DoSomething(Value: PrivateType = PrivateConst);
 +
    function ReturnSomething: PrivateType;
 +
    property SomeProp: PrivateType read FPrivateField write FPrivateField default PrivateConst;
 +
  end;
 +
 +
  procedure TSomeClass.DoSomething(Value: PrivateType = PrivateConst);
 +
  begin
 +
  end;
 +
 +
  function TSomeClass.ReturnSomething: PrivateType;
 +
  begin
 +
    Result := PrivateConst;
 +
  end;
 +
 +
begin
 +
end.
 +
</delphi>
 +
 +
nested classes:
 +
 +
<delphi>
 +
type
 +
  TSomeClass = class
 +
  strict private
 +
    type
 +
      TPrivateNestedClass = class
 +
      public
 +
        procedure DoSomething;
 +
      end;
 +
  public
 +
    type
 +
      TNestedClass = class
 +
      public
 +
        procedure DoSomething;
 +
      end;
 +
    class procedure Test; virtual;
 +
  end;
 +
 +
  TDescendant = class(TSomeClass)
 +
  public
 +
    class procedure Test; override;
 +
  end;
 +
 +
procedure TSomeClass.TPrivateNestedClass.DoSomething;
 +
begin
 +
  WriteLn('TSomeClass.TPrivateNestedClass.DoSomething: ok');
 +
end;
 +
 +
procedure TSomeClass.TNestedClass.DoSomething;
 +
begin
 +
  WriteLn('TSomeClass.TNestedClass.DoSomething: ok');
 +
end;
 +
 +
class procedure TSomeClass.Test;
 +
var
 +
  P: TPrivateNestedClass;
 +
  N: TNestedClass;
 +
begin
 +
  P := TPrivateNestedClass.Create;
 +
  P.DoSomething;
 +
  P.Free;
 +
  N := TNestedClass.Create;
 +
  N.DoSomething;
 +
  N.Free;
 +
end;
 +
 +
class procedure TDescendant.Test;
 +
var
 +
  N: TNestedClass;
 +
begin
 +
  N := TNestedClass.Create;
 +
  N.DoSomething;
 +
  N.Free;
 +
end;
 +
 +
begin
 +
  TSomeClass.Test;
 +
  TDescendant.Test;
 
end.
 
end.
 
</delphi>
 
</delphi>

Revision as of 16:48, 13 January 2010

static fields, static properties, regular fields and regular properties: <delphi> type

 TSomeClass = class
 private
   type
     TSomeType = type integer;    // an internal type
   class var
     FSomeClassVar: TSomeType;    // class variable belongs to a class, not an instance
   var
     FSomeIntanceVar: TSomeType;  // instance variable belongs to instance. it is a usual field
   class procedure SetSomeClassVar(const AValue: TSomeType); static;
 public
   class property SomeProperty: TSomeType read FSomeClassVar write SetSomeClassVar; // class property - belongs to a class
   property SomeInstanceProp: TSomeType read FSomeIntanceVar;
 end;

{ TSomeClass }

class procedure TSomeClass.SetSomeClassVar(const AValue: TSomeType); begin

  FSomeClassVar := AValue;

end;

var

 SomeClass: TSomeClass;

begin

 SomeClass.SomeProperty := 1;
 WriteLn(SomeClass.SomeProperty);

end. </delphi>

class constants:

<delphi> type

 TSomeClass = class
 strict private
   const
     PrivateConst = 1;
   type
     PrivateType = type Integer;
   var
     FPrivateField: PrivateType;
 public
   procedure DoSomething(Value: PrivateType = PrivateConst);
   function ReturnSomething: PrivateType;
   property SomeProp: PrivateType read FPrivateField write FPrivateField default PrivateConst;
 end;
 procedure TSomeClass.DoSomething(Value: PrivateType = PrivateConst);
 begin
 end;
 function TSomeClass.ReturnSomething: PrivateType;
 begin
   Result := PrivateConst;
 end;

begin end. </delphi>

nested classes:

<delphi> type

 TSomeClass = class
 strict private
   type
     TPrivateNestedClass = class
     public
       procedure DoSomething;
     end;
 public
   type
     TNestedClass = class
     public
       procedure DoSomething;
     end;
   class procedure Test; virtual;
 end;
 TDescendant = class(TSomeClass)
 public
   class procedure Test; override;
 end;

procedure TSomeClass.TPrivateNestedClass.DoSomething; begin

 WriteLn('TSomeClass.TPrivateNestedClass.DoSomething: ok');

end;

procedure TSomeClass.TNestedClass.DoSomething; begin

 WriteLn('TSomeClass.TNestedClass.DoSomething: ok');

end;

class procedure TSomeClass.Test; var

 P: TPrivateNestedClass;
 N: TNestedClass;

begin

 P := TPrivateNestedClass.Create;
 P.DoSomething;
 P.Free;
 N := TNestedClass.Create;
 N.DoSomething;
 N.Free;

end;

class procedure TDescendant.Test; var

 N: TNestedClass;

begin

 N := TNestedClass.Create;
 N.DoSomething;
 N.Free;

end;

begin

 TSomeClass.Test;
 TDescendant.Test;

end. </delphi>