List<Type> BotNames = typeof(BotPlayer).Assembly.GetTypes().Where(type => type.IsSubclassOf(typeof(BotPlayer))).ToList();
Я поместил этот список в поле со списком, которое будет отображаться пользователю в раскрывающемся меню. Я пытаюсь создать экземпляр выбранного элемента поля со списком, который является подклассом класса с именем BotPlayer и предназначен для использования метода с именем "Move", который присутствует в классе и всех его подклассах. Я также пытаюсь передать этот экземпляр в переменную BotPlayer с именем Bot. Я пробовал разные способы использования Activator.CreateInstance, но, похоже, он мне не подходит или я не понимаю этого достаточно, чтобы внедрить его в свою собственную программу. Это было самое дальнее, что я смог получить
Bot = (BotPlayer)Activator.CreateInstance((Type)Difficulty.SelectedItem);
Когда я запускаю свою программу, она выдает мне такую ошибку: «System.MissingMethodException:« Для этого объекта не определен конструктор без параметров »."
Это код для поля со списком, который существует в Designer.cs
this.Difficulty.FormattingEnabled = true;
this.Difficulty.Items.AddRange(BotNames.ToArray());
this.Difficulty.Location = new System.Drawing.Point(205, 181);
this.Difficulty.Name = "Difficulty";
this.Difficulty.Size = new System.Drawing.Size(137, 21);
this.Difficulty.TabIndex = 3;
Это код для поля со списком, который существует в обычном файле CS
if (Difficulty.SelectedItem != null)
{
Bot = (BotPlayer)Difficulty.SelectedItem; //This is called casting
Bot.Type = BotType;
//Bot = (BotPlayer)Activator.CreateInstance((Type)Difficulty.SelectedItem);
//Bot = (BotPlayer)Activator.CreateInstance("MyAssembly", "BotPlayer");
}
Это конструктор BotPlayer
public BotPlayer(GameBoard board, SquareValues type)
{
Type = type;
Board = board;
// Difficuty = difficulty;
}
Это конструктор для всех его подклассов
public BotPlayer1(GameBoard board, SquareValues type) : base(board, type)
{
Board = board;
Type = type;
BotName = "Level 1";
}
Единственная разница между подклассами - это число в конце BotPlayer и имя бота, которое эквивалентно этому числу со словом «Level» за ним