大家好,第一个问题是Static和Register是什么意思. 官方文档没找到这两个说明. 我同事定义了一个class function, 然后又加上static和register, 就是这样
  class function Fun():Integer; static; register; inline;
请大拿们解释一下. class为什么还要加Static呢?不懂. register是神马意思呢?另外一个关于编译问题的, 我在父类声明了一个abstract virtual的方法, 为神马我在子类不实现没有编译错误呢?!谢谢!
M.

解决方案 »

  1.   

    register是调用约定,delph默认的调用约定就是register,所以通常可以省略不写。
    这些官方文档都有,不知道你咋查的,或者你查的哪家的官方static关键字是delphi 2007 还是 2009之后加入的,老版本的delphi没有
    http://docwiki.embarcadero.com/RADStudio/XE4/en/Static
      

  2.   

    撸哥, 你咋搜到register呢, 我就是查这个官网呢
      

  3.   

    撸哥给的link也不对, 讲的是Static修饰变量, 而且是C++的, 是一个意思么? 谢谢!
      

  4.   


    这个这样不好吧!比如
    type A = class
    protected
      function getName(): widestring; virtual; abstract;
    public
      procedure ShowName(); // call getName
    end
    type B = class(A), 我B不实现getName, 编译过来, 运行时才报错, 这样不爽吧谢谢!
    M.
      
      

  5.   

    static 顾名思义跟c++一样,就是静态,你装个2006以上的版本,输入static,在上面按F1调出help看看有没有
      

  6.   


    那跟class function有什么区别吗? class function不是也是静态方法的意思么.M.
      

  7.   

    记得高版本的delphi可以开启相关编译警告,你自己在compiler message里找找
      

  8.   


    这个这样不好吧!比如
    type A = class
    protected
      function getName(): widestring; virtual; abstract;
    public
      procedure ShowName(); // call getName
    end
    type B = class(A), 我B不实现getName, 编译过来, 运行时才报错, 这样不爽吧谢谢!
    M.
      
    怎么不爽了?抽象类难道一定就是完全抽象的吗?抽象类也可以有自己的功能,不然他和接口有什么不同吗?!!
      

  9.   


    这个这样不好吧!比如
    type A = class
    protected
      function getName(): widestring; virtual; abstract;
    public
      procedure ShowName(); // call getName
    end
    type B = class(A), 我B不实现getName, 编译过来, 运行时才报错, 这样不爽吧谢谢!
    M.
      
    怎么不爽了?抽象类难道一定就是完全抽象的吗?抽象类也可以有自己的功能,不然他和接口有什么不同吗?!!
    俺说的是纯虚函数呢, 不实现不报错当然不爽了.
      

  10.   


    那跟class function有什么区别吗? class function不是也是静态方法的意思么.M.区别在于static方法不能被override
      

  11.   


    这个这样不好吧!比如
    type A = class
    protected
      function getName(): widestring; virtual; abstract;
    public
      procedure ShowName(); // call getName
    end
    type B = class(A), 我B不实现getName, 编译过来, 运行时才报错, 这样不爽吧谢谢!
    M.
      
    怎么不爽了?抽象类难道一定就是完全抽象的吗?抽象类也可以有自己的功能,不然他和接口有什么不同吗?!!
    俺说的是纯虚函数呢, 不实现不报错当然不爽了.抽象类指的就是含有纯虚函数的类
      

  12.   

    刚用d7看了下,啥也不用设置,就会有警告,还不够你爽么[code=delphi]
    type
      TA = class
        function foo: Integer; virtual; abstract; // strict
      end;
      TA1 = class(TA) end;
    .....var
      a: TA1;
    begin
    [Warring]Unit1.pas(30): Constructing InstanceSize of 'TA1' containing abstract method 'TA1.foo'
      a := TA1.Create; // 报警但不报错,因为不是错[/code]
      

  13.   

    要有python的精神:错误是用来避免的,不是用来看的