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

  • 相关阅读:
    5G NR系列(四)物理下行共享信道(PDSCH)物理层过程详解
    5G NR系列(三)PDSCH的解调参考信号(DM-RS)
    Mac上重装pycharm打不开的解决方法
    Oracle parallel理解
    V$ASM_DISKGROUP视图信息解读
    深入了解 Oracle Flex ASM 及其优点
    使用typora和印象笔记高效输出
    Centos7.6部署k8s 集群
    DBA日常职责
    利用DCLI命令实现跨机器检查
  • 原文地址:https://www.cnblogs.com/huangjacky/p/1622186.html
Copyright © 2011-2022 走看看