Массив / Список / Каталог System.Type - PullRequest
0 голосов
/ 16 апреля 2010

У меня много классов, и я хочу создать какую-то «директорию».

Чтобы я мог создавать меню автоматически.

Щелчок по пункту меню создаст экземпляр класса и покажет окно.

Для этого я хочу массив System.Type, в который я могу добавлять все классы без их создания.

Хотя из моего теста и (неудачного) поиска в Google это не представляется возможным.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2010

Это работает для вас, чтобы создать простое отображение? ArrayList не является универсальным, но вы можете вместо него создать собственный объект.

var mapper = new System.Collections.Generic.Dictionary<string, System.Type>();   
mapper.Add("show-about-box", typeof(MyApp.Forms.AboutBox));

Затем вы можете использовать отражение для создания экземпляра класса, используя такой код:

// Create an instance using [Activator.CreateInstance][1].
System.Type toCreate = mapper["show-about-box"];
Object o = Activator.CreateInstance(toCreate);

// Or, using try-get to be safer
System.Type toCreate = null;
if ( mapper.TryGetValue("show-about-box", out toCreate) ) {
     Object o = Activator.CreateInstance(toCreate);
}
0 голосов
/ 16 апреля 2010

Да, это можно сделать, если я вас правильно понимаю. Посмотрите на классы в пространстве имен System.Reflection, начиная с класса Assembly и его метода GetExportedTypes. Это дает вам массив публично объявленных объектов System.Type из указанной сборки - http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getexportedtypes.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...