現在、ソケット接続を介してシリアル化されたオブジェクトを受信していますが、これは問題なく動作します。私もそれをうまくデシリアライズしています。ここで、クライアントにネットワーク経由で複数のオブジェクト タイプ (またはクラス) を送信してもらいたいと考えています。
これは、オブジェクトをタイプ「MyClass」に逆シリアル化する方法です。
var m = new MemoryStream(Convert.FromBase64String(dataReceived));
var b = new BinaryFormatter();
var o = (MyClass)b.Deserialize(m);
ここで、複数のオブジェクト型を受け取りたい場合は、サポートされている任意の型にキャストできるメソッドを作成するか、オブジェクトの型を教えてからキャストするヘッダーを送信できます。私は最初の方法を好みます。
もちろん、GetType() でキャストすることはできません。また、name プロパティを使用すると、文字列が切り替わる結果になり、私は嫌いです。そこで、次のいずれかを実行できると判断しました。
object objectReceived = b.Deserialize(m);
if(o is MyClass){
MyClass myClass = (MyClass) objectReceived;
}
else if (o is AnotherClass){
AnotherClass myOtherClass = (AnotherClass) objectReceived;
}
( as 演算子を使用して何かを行うこともできますが、後で null をチェックする必要があります。たとえば)
var MyClass = objectReceived as MyClass;
var AnotherClass = objectReceived as AnotherClass
または、ネットワークを介して送信されるすべてのオブジェクトが実装するインターフェイスを実装し、オブジェクトをそのインターフェイスとしてキャストして、その型を返し、それに応じてキャストすることもできます。
問題は、私はすでにその作業コードを持っていますが、そのインターフェイスをコーディングするためのきれいな方法を理解できないということです. インターフェイスのメソッドは何を返す必要がありますか? タイプ?文字列?私は本当に知りません。これが私が自分自身に言い聞かせている理由です: まあ、私は動作するコードを持っているので、それが良い習慣であり、維持するのが簡単であれば、時間の制約のために今は方法がわからないインターフェイスを作成するという問題に巻き込まれることはありません. .
それが私の質問です:私のアプローチは正しいですか/良い習慣ですか? または、インターフェースアプローチの方が優れていますか?
助けてくれてありがとう!