mar*_*stT 15 delphi delphi-2009 abstract
我正在使用具有许多抽象类的组件套件.现在我想应用多态,但是在创建对象时我得到了错误抽象类.
我是否应该覆盖所有虚拟方法,即使我不需要它?有任何解决方法或解决方案吗?
Too*_*the 25
为了创建类的实例,您需要覆盖声明为虚拟抽象的所有方法.即使你不使用它们.
如果你真的想要一个解决方法,你可以使用空方法.但我不会推荐这个.
并添加有关该主题的更多信息:
如果使用虚拟抽象声明方法,则该方法是抽象的:
procedure MyMethod(const AMyParameter: Integer); virtual; abstract;
Run Code Online (Sandbox Code Playgroud)
琐事:您甚至可以将方法覆盖为抽象:
procedure MyMethod(const AMyParameter: Integer); override; abstract;
Run Code Online (Sandbox Code Playgroud)
您需要覆盖这些方法才能从该类实例化.
您可以将整个类声明为抽象:
type
TMyClass = class abstract (TMyAncestor)
end;
Run Code Online (Sandbox Code Playgroud)
如果您尝试实例化该类,则会收到警告.
对应的是密封类:
type
TMyClass = class sealed (TMyAncestor)
end;
Run Code Online (Sandbox Code Playgroud)
如果您尝试从该类继承,则会收到警告.
你也可以密封方法,但你需要关键字final.
procedure MyMethod(const AMyParameter: Integer); override; final;
Run Code Online (Sandbox Code Playgroud)
Delphi没有抽象类,只有抽象方法.如果调用抽象方法,则会引发抽象方法异常.
简单地说,你不能调用抽象方法.如果编译器检测到您使用抽象方法实例化类,则编译器会发出变暖.好的做法是让编译器将这些警告变成错误.