【问题标题】:How to make a child class's methods static?如何使子类的方法静态?
【发布时间】:2009-07-16 08:38:11
【问题描述】:

我的父类是一个表单(TParent),代码如下:

type
TChild = class(TParent)
private
  procedure Handle(sock:integer);static; //error
end;

implementation

错误是“STATIC 只能用于非虚拟方法”

有没有办法做到这一点?

如果不是,我可以将父类(TForm)设为静态吗?

TParent 类是用于 WSAAsyncSelect() 的表单,它是隐藏的(不是主表单)。它仅用于消息循环。

【问题讨论】:

    标签: delphi class


    【解决方案1】:

    试试这个:

    type
    TChild = class(TParent)
    private
     class procedure Handle(sock:integer); static;
    end;
    

    【讨论】:

    • 对不起,我忘了在程序前放课,再测试一下,它应该可以工作
    • 这里真的需要“static”关键字吗?通过将其声明为“类过程”,该过程已经是 C 意义上的“静态”。据我了解,“静态”关键字是为了与 .NET 兼容而引入的,其作用是禁止引用在当前过程之外声明的变量,并抑制隐含的“Self”参数。 “static”关键字似乎在本机代码中引入了不必要的限制。
    • 是的,迈克,static 很重要。 Delphi 的类方法有一个“Self”参数,就像普通方法一样。在此示例中,它包含类引用,例如 TChild。它与 C++ 的静态成员函数不同;为此,您需要 Delphi 的static。静态类方法不能是虚拟的,但它们可以用于通常需要独立过程的情况。然而,我们真的不知道static 是否需要here,因为我们还没有被告知Handle 函数应该做什么。
    • 调用过程Handle也比较混乱,因为它是TForm的一个属性名(继承自TWinControl)
    • @Rob。是的,我同意我有点冒昧,因为我们不知道示例程序的上下文,但您的其余评论似乎同意我的观点。我想我会发布一个关于这个主题的新问题。
    猜你喜欢
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多