2017-02-23 4 views
0

Я хочу использовать Reflection, чтобы динамически заполнять мои флажки.C# Получить список классов в пространстве имен за рефлексию

Я нашел помогает ответ here

И использовал его в своем коде:

public static List<System.Type> getModuleList() 
    { 
     // fill with all Classes in Timestamp.View.UserControls.ModuleView per Reflection 


     List<System.Type> theList = Assembly.GetExecutingAssembly().GetTypes() 
           .Where(t => t.Namespace == "Timestamp.View.UserControls.ModuleView") 
           .ToList(); 


     return theList; 
    } 

я заполнил мои Флажки как:

foreach (System.Type type in ModuleController.getModuleList()) 
     { 
      cbModule1.Items.Add(type); 
      cbModule2.Items.Add(type); 
      cbModule3.Items.Add(type); 
      cbModule4.Items.Add(type); 
     } 
  1. Теперь я хочу, чтобы создать новый экземпляр выбранного типа

    private void CbModule4_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
        ucModul4.Content = //new Instance of Selected Item 
    } 
    

Я могу использовать Reflection для создания нового экземпляра, но я не знаю, как это сделать.

  1. Я хочу дать каждому классу строку, которая будет отображаться как элемент в флажке. Возможно ли это, или мне нужен метод для поиска класса по его строке?

EDIT: Мне нужно доказывать, почему мой вопрос отличается от this one

Итак, прежде всего, этот вопрос можно решить только одну из моих проблем, но я нашел его раньше, и это не помогло мне. Я не знаю, как получить тип списка и как я могу дать классу псевдоним.

+0

Не ходи для отражения по пространствам имен, определите общий интерфейс, поскольку все они, похоже, имеют что-то общее, а затем просто получают типы, реализующие этот интерфейс , Затем вы можете заполнить те свойства, которые вы хотите, напечатанным способом, и предположительно у них будет метка и свойство checked – Icepickle

+0

@Icepickle. У всех их есть общий интерфейс под названием IModuleView. Но как мне получить все классы, реализующие этот интерфейс? – itskajo

ответ

1

, потому что добавление Type в выпадающий список позволяет type.ToString() и помещает строковое представление в combobox, вы можете использовать

var instance = Activator.CreateInstance(Type.GetType(cbModule4.SelectedText))

При прохождении типа, вы можете сделать:

var instance = Activator.CreateInstance(theList[0]))

+0

Я не могу переопределить type.ToString() правильно? – itskajo

+1

вы можете сделать вспомогательный класс, например ComboItem, и его экземпляры в combobox – Nino

+0

Хорошая идея, спасибо :) – itskajo

Смежные вопросы