В настоящее время я работаю над проектом на C #, где мне нужно реализовать рефлексию.Я создал приложение WPF с графическим интерфейсом.Этот GUI содержит комбинированный список, который содержит все имена классов, которые реализуют определенный интерфейс.Классы с отображаемыми именами классов живут в одном и том же решении.Рядом с выпадающим списком находится кнопка для обновления содержимого в выпадающем списке.Однако, когда я запускаю свое приложение, изменяю имя класса, который реализует интерфейс, и нажимаю на эту кнопку обновления, изменения не отображаются в выпадающем списке.Например, когда я меняю имя класса, вместо старого должно отображаться новое имя класса.
Я извлек эту часть своего проекта, чтобы протестировать его в пустом консольном приложении.Здесь у меня есть интерфейс, который реализуется классами QuickSortAlgorithm, DynamicSortAlgorithm и MergeSortAlgorithm.Затем я написал следующий простой код в своем основном классе.
public static List<string> AlgoList = new List<string>();
static void Main(string[] args) {
RefreshAlgorithms();
Print();
Console.WriteLine("\nChange a classname and press a key \n");
Console.ReadKey();
Print();
Console.WriteLine("\nPress a key to exit the program \n");
Console.ReadKey();
}
private static void RefreshAlgorithms() {
AlgoList.Clear();
Type AlgorithmTypes = typeof(IAlgorithms);
foreach (var type in Assembly.GetCallingAssembly().GetTypes()) {
if (AlgorithmTypes.IsAssignableFrom(type) && (type != AlgorithmTypes)) {
AlgoList.Add(type.Name);
}
}
}
private static void Print() {
Console.WriteLine("Algorithm classes:");
foreach (var Algo in AlgoList) {
Console.WriteLine(Algo);
}
}
Когда я запускаю приложение, вижу напечатанные имена классов QuickSortAlgorithm, DynamicSortAlgorithm и MergeSortAlgorithm.Однако, если я изменю имя, например, класса QuickSortAlgorithm на QuickSortAlgorithmmmmm, я ожидаю, что он напечатает QuickSortAlgorithmmmmm, как только я нажму клавишу.Однако это не тот случай, и имя QuickSortAlgorithm по-прежнему отображается.
У меня такое ощущение, что я что-то упускаю из виду в концепции отражения.Можно ли это сделать даже после построения решения?Если я правильно понял, эта концепция позволяет вносить изменения во время выполнения.Я знаю, что это сделает мое приложение намного медленнее, но я действительно хочу узнать больше об этой концепции.Если кто-нибудь объяснит мне, что я делаю неправильно, я был бы очень счастлив.