1

クラスを含む辞書があります。ただし、ディクショナリに追加するクラスがたくさんあり、追加の長いリストを削除したいと考えています。すべてのデータをファイルに格納し、それを読み込んで辞書に追加することを考えていましたが、新しいクラスを作成して追加するたびに、ファイルを変更する必要があることに気付きました。新しく作成したクラスに、辞書に自動的に追加するものを含めたいと思います。これが可能かどうかさえわからないので、助けていただければ幸いです。

4

2 に答える 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 に答える