タイトルは少し誤解を招くかもしれませんが、適切に言い方をする方法がわからないので、誰かがより良いタイトルを知っている場合は編集してください。クラス名をジェネリック型に変更します
(ReadMessage)から派生しなければならないジェネリック型を取る方法があります。 そのように今私は、すべてがMessageBaseから継承したクラス名のリストを持っている:
messageBaseNames = {
{ 1 : "MyMessageBase01" },
{ 2 : "MyMessageBase02" },
{ 3 : "AnotherMessageBase" }
}
次のようにReadMessage
方法が通常使用されている:
public Dictionary<int,string> messageBaseNames = new Dictionary<int,string>();
は私の辞書はこのようになりますと言うことができます
public void ProcessMessageBase(NetworkMessage netMsg) {
var msg = netMsg.ReadMessage<MyMessageBase01>();
}
これらの文字列表現をReadMessage
ジェネリック型に渡すことはできますか? netMsg
にはshort
の値があるので、どの文字列が正しいかわかります。ただ、添加物として
が、これはReadMessage
の署名である:私は、単一の機能に集約したいと異なるネットワークメッセージの束を送信してい
を:
そして、明確化のためpublic TMsg ReadMessage<TMsg>() where TMsg : MessageBase, new();
その方法から頒布する。そのためには、異なるMessageBaseタイプに対応するために、ReadMessage
関数を動的にする必要があります。
それはあなたのために大丈夫でしょうか? – NineBerry
[リフレクトを使用して汎用メソッドを呼び出すにはどうすればよいですか?](http://stackoverflow.com/questions/232535/how-do-i-use-reflection-to-call-a-generic-method) – NineBerry
@NineBerryいいえ、残念ながら、それは具体的なタイプでなければなりません。 – ShitakeOishii