procedure AfterConstruction; override;
procedure BeforeDestruction; override;
class function NewInstance: TObject; override;
property RefCount: Integer read FRefCount;
end;
TIntecedObject实现了IIntece接口,因此,TIntecedObject声明和实现了IIntece的三个方法。 实现接口的类可以被当作基类(前面第一个例子中,TmemoryManager就是以TIntecedObject作为基类)。因为每个接口都继承自IIntece,所以,一个实现接口的类必须实现QueryIntece、_AddRef和_Release方法。System单元中的TIntecedObject实现了这些方法,所以,其它实现接口的类可以方便地通过继承它来实现。
当一个接口被实现时,它声明的每个方法都将和它的实现类中的方法一一对应:有相同的返回值类型、相同的调用约定、同样数目的参数,并且参数的类型和位置是相同的。默认情况下,接口中的方法对应于实现类中同名的方法。
Method resolution clauses(方法解析子句,方法别名)
在声明类时,通过方法解析子句你可以改变默认的名称映射。当一个类实现两个或多个接口、并且其中有同名的方法时,使用方法别名可以避免混乱。
方法解析子句采用如下格式
procedure intece.inteceMethod = implementingMethod;
或
function intece.inteceMethod = implementingMethod;
这里,implementingMethod是在这个类或它的一个祖先类中声明的方法。implementingMethod可以是此类中稍后声明的方法;当implementingMethod是祖先类的方法时,若祖先类不在同一个模块中,则方法不能是私有的。(因为不能访问另一个模块中的私有成员)
比如,下面的类声明
type
TMemoryManager = class(TIntecedObject, IMalloc, IErrorInfo)
function IMalloc.Alloc = Allocate;
procedure IMalloc.Free = Deallocate;
- 144 -
Object inteces
...
end;
把IMalloc接口的Alloc和Free方法分别映射到TMemoryManager类的Allocate和Deallocate方法。 方法解析子句不能更改祖先类引入的方法映射。
Changing inherited implemetations(更改继承实现)
通过覆盖实现方法,子类可以改变接口方法的实现方式,这要求实现方法是虚拟的或者是动态的。 一个类也可以重新(完整地)实现它从祖先类继承下来的接口,这要求它在声明时重新列出这个接口。例如
type
IWindow = intece
['{00000115-0000-0000-C000-000000000146}']
procedure Draw;
...
end;
TWindow = class(TIntecedObject, IWindow) // Twindow实现IWindow
procedure Draw;
...
end;
TFrameWindow = class(TWindow, IWindow)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-108.html
好期待啊
不就是个死吗
不客气的说
一个重庆市里生活的大学生