私はthis oneに似た質問があります。次のように派生クラスとシャドーイングのソリューション
私の問題は、次のとおりです。
私は他のすべてのメッセージ
public class BaseMessage : ISpecificMessage1
{
public MsgType {get;set;} //enum
public abstract void read(BinaryReader br);
public abstract void write(BinaryWriter bw);
}
のための基本メソッドを提供し、私はこれらの基本的なメソッドをオーバーライドするクラスを派生しているいくつかの基本メッセージを持っています。すなわち、
public class MessageType1 : BaseMessage
{
public override void read(BinaryReader br)
{
//Do the read..
}
public override void write(BinaryWriter bw)
{
//Do the write..
}
}
私はレベル深くそのメソッドをオーバーライドする他の派生クラスを持って再び
public class MessageType1_Extended : MessageType1
{
public override void read(BinaryReader br)
{
//Do the read different to MessageType1..
}
public override void write(BinaryWriter bw);
{
//Do the write different to MessageType1..
}
}
現時点では私の問題は、私はメッセージパーサーを実行しているということである、と私は削除するために、静的メソッドを呼び出しますラッパーは、メッセージがあることとBaseMessageようなメッセージが返されたタイプを決定
public static BaseMessage extractMessage(byte[] msg)
{
//Remove header... get type...
switch(MsgType)
{
case type1_ext:
return new MessageType1_Extended()
//etc...
}
}
Iが抽出されたメッセージに.read()を呼び出し、クラス2つのより大きいレベルの深コールのみBaseMessage以上のレベルのメソッドを読み込みます。つまり、 MessageType1_extendedはMessageType1の読み取りを実行します。
私はこれが以前のリンクされた質問を読むことからなぜ起こっているのか理解していますが、私の質問はこれを回避する方法があるかどうかです。 タイプを型にハードキャストしないで、型にキャストして独自のoverrideメソッドを呼び出す方法はありませんか? ((MessageType1_extended)extractedMessage).read(); ??
ありがとうございました。
あなたの質問は私には少し不明です。 'write()'の 'read()'と 'base.write()'に 'base.read()'がありますか? – ViRuSTriNiTy
明確にするためにポストが更新されました。各クラスの読み書きはそれぞれ異なります – grant90
正しいメソッドを呼び出すことができないコードを表示する必要があります。あなたがしていることはうまくいくはずです – pm100