クラスを含む辞書があります。ただし、ディクショナリに追加するクラスがたくさんあり、追加の長いリストを削除したいと考えています。すべてのデータをファイルに格納し、それを読み込んで辞書に追加することを考えていましたが、新しいクラスを作成して追加するたびに、ファイルを変更する必要があることに気付きました。新しく作成したクラスに、辞書に自動的に追加するものを含めたいと思います。これが可能かどうかさえわからないので、助けていただければ幸いです。
質問する
217 次
2 に答える
0
辞書を何らかのクラスの静的フィールドにするか、「クラスを辞書に追加」を静的メソッドにします。
次に、静的コンストラクターを使用して、各クラスを辞書に追加できます。
class ClassDict {
...
public static void AddClass(Type t) {
...
}
}
class Foo {
static Foo() {
ClassDict.AddClass(typeof(Foo));
}
}
于 2012-10-14T17:10:43.343 に答える
0
リフレクションを使用して、必要なすべてのクラスを動的に見つけるようにしてください。クラスが定義されている場所のインスタンスを作成し、Assembly
それらを除外してみてください。以下の例は、名前が で終わるすべてのクラスを見つける方法を示していますTask
。
var assembly = Assembly.GetExecutingAssembly();
var taskTypes = assembly.GetTypes()
.Where(t => t.Name.EndsWith("Task") && t.IsClass);
Dictionary<string, object> instances =
new Dictionary<string, object>(taskTypes.Count());
foreach (Type classType in taskTypes)
{
object instance = Activator.CreateInstance(classType);
instances.Add(classType.Name, instance);
Console.WriteLine("Registered key {0} with object of type {1})",
classType.Name,
instance);
}
メソッドを使用Activator.CreateInstance
してクラスのインスタンスを作成しましたが、パラメーターのないコンストラクターなどがあるかどうかによっては、これが不可能な場合があります。
別のオプションとして、 autofacなどの利用可能な IoC コンテナーの 1 つを使用することもできますが、これについて適切なアドバイスをする前に、問題の詳細が必要です。
于 2012-10-14T17:15:16.023 に答える