私はこの質問の良いタイトルを実際に見つけることはできませんが、次のようになります。私はクラスとそのクラスのインスタンスを識別する状況に自分自身を見つける。私が持っている解決策は、クラスの値とconst
のインスタンスの値を返すプロパティを使用することです。派生クラスとインスタンスを一方向に識別する
もっと良い解決策があるかどうかわかりません。値を特定して再利用するには2つの方法が必要なのはちょっと奇妙です。より良い方法がありますか?
下記の疑似コード。実際のアプリケーションでは、基底クラスから派生したクラスがさらにあり、objects
リストにはこれらのインスタンスも含まれます。デシリアライゼーションは、起動時に行われ、ユーザー活動のためにリストが変更された後のシャットダウン時にシリアル化されます。
static void Main(string[] args)
{
List<Base> objects = new List<Base>();
List<string> serializationIds = new List<string>();
// SerializationIds initialized somehow
foreach (var serializationId in serializationIds)
{
switch(serializationId)
{
// Identify class
case Derived.SerializationIdText:
objects.Add(new Derived());
break;
}
}
// add remove objects
foreach (var item in objects)
{
// Identify instance
string serializationId = item.SerializationId;
// Do something with serializationId;
}
}
public abstract class Base
{
public string SerializationId { get; set; }
}
public class Derived : Base
{
public const string SerializationIdText = "DatabaseExplorer";
public Derived()
{
SerializationId = SerializationIdText;
}
}
のようなものを持っていることができるように、「私は、私はクラスを識別したい状況で自分自身を見つけ、あまりにも、switchステートメント内のコードをリファクタリングすることができるかもしれないとクラスのインスタンスです。 " - もっと深く行こう。なぜあなたはこれをしたいのですか?たぶんあなたの根本的な問題を解決する良い方法があります。 –
これは基本的に私の問題です。実際のアプリケーションはより複雑ですが、基本的な問題はこの直列化の問題です。ここでは、逆シリアル化できるようにシリアル化するものを特定する必要があります。 –
シリアル化時にストリームにID(クラス用)とデータ(インスタンス用)を格納しています。逆シリアル化時には、IDとデータを魔法のようにインスタンスに戻す必要があります正しいクラスの...? –