zoukankan      html  css  js  c++  java
  • Delphi 新语法之类相关的

    技术交流,DH讲解.

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

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

    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关键字.

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

    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;

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

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

      THuangJacky = class
      private
        FName:string;
      end;
    
      TTheFiend = class(THuangJacky)
      public
        procedure SayMyName;
      end;
    
    { TTheFiend }
    
    procedure TTheFiend.SayMyName;
    begin
      ShowMessage(FName);
    end;

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

      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#那样是纯面向对象的.

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

      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,就到这里.

  • 相关阅读:
    Algs4-1.3链表实现泛型可迭代Stack
    Algs4-1.3链表实现科泛型可迭代Bag
    Algs4-1.3链表实现不定容泛型Queue不支持迭代
    Algs4-1.3不定容数组实现泛型栈支持迭代
    Algs4-1.3链表实现不定容泛型Stack不支持迭代
    Algs4-1.3不定容泛型栈(不可迭代)
    Algs4-1.3定容字符串栈
    Algs4-1.3定容泛型栈
    Algs4-1.3E.W.Dijkstra双栈算术表达式求值算法
    Algs4-1.2(非习题)可视化累加器
  • 原文地址:https://www.cnblogs.com/huangjacky/p/1622186.html
Copyright © 2011-2022 走看看