Packet
抽象メソッドを持つクラスがありgetID
ます:
Type
Packet = class
...
function getID() : Integer;virtual;abstract;
class procedure writePacket(par0 : Packet; par1 : TIdTCPConnection);
...
implementation
class procedure Packet.writePacket(par0 : Packet; par1 : TIdTCPConnection);
// par1 is a TCP connection used to send data through the network;
begin
par1.writeInteger(par0.getID());
//some code following
end;
私は次のサブクラスを持っています:
type
PacketTest = class(Packet)
...
function getID() : Integer;
...
function PacketTest.getID():Integer;
begin
result := {some value individual for each subclass}
end;
writePacket
ここで、パケットのサブクラスをとしてスーパークラスのクラスプロシージャをpar0
呼び出します。これにより、サブクラスの関数が呼び出されますgetID
。代わりに、スーパークラスの関数getID
を呼び出し、(もちろん)抽象的なエラーをスローします。
サブクラスの関数を動的に呼び出したいのですが、それ自体が抽象であるため、は常にのサブクラスであるgetID
ため、問題が発生することはありません。par0
Packet
Packet