Добрый день. Помогите разобраться с задачкой.
Есть интерфейс.
ICommandpublic interface ICommand
{
void Start();
void Close();
}
Есть его условные реализации:
Реализацииpublic class Winamp : ICommand
{
public void Close()
{
Console.WriteLine("Winamp closed");
}
public void Start()
{
Console.WriteLine("Winamp started");
}
}
public class KmPlayer : ICommand
{
public void Close()
{
Console.WriteLine("KmPlayer closed");
}
public void Start()
{
Console.WriteLine("KmPlayer started");
}
}
public class Steam : ICommand
{
public void Close()
{
Console.WriteLine("Steam closed");
}
public void Start()
{
Console.WriteLine("Steam started");
}
}
Есть вроде бы как контейнер который хранит пару ключ-значение.
Словарьprivate static Dictionary<string, ICommand> CreateCommands()
{
var commands = new Dictionary<string, ICommand>();
commands.Add("Winamp", new Winamp());
commands.Add("Steam", new Steam());
commands.Add("Player", new KmPlayer());
return commands;
}
Проблема в том, что если я пытаюсь перебрать словарь по значению, то программа вызывает сразу все мне реализации методов в классе.
Как сделать так, что бы вызывался конкретный метод нужного класса?
Я понимаю, что проблема вероятно в цикле, поскольку там не указано, какой класс конкретно вызывать при вводе команды.
Но додуматься не получается пока что, как сделать.
Обработка вводаstatic void Main(string[] args)
{
var d = CreateCommands();
Console.WriteLine("???");
string k = Console.ReadLine();
foreach (var item in d)
{
switch (item.Key)
{
case "Winamp":
item.Value.Start();
break;
case "Steam":
item.Value.Start();
break;
}
}
Console.ReadKey();
}