Выберите реализацию интерфейса по переменной - PullRequest
0 голосов
/ 04 июля 2019

В моем графическом интерфейсе есть выпадающий список клиентов. С каждым клиентом связан класс, содержащий методы, связанные с этим клиентом (например, загрузка формата их счета и т. Д.). Каждый из классов заказчика реализует интерфейс «ICustomer», но содержание методов различается.

У вызывающего класса есть свойство ICustomer - я хотел бы установить, чтобы это был класс, представленный выбранным значением в раскрывающемся списке. Нечто похожее на этот псевдокод:

public interface ICustomer
{
    int GetInvoice();
}

и

Class Caller()
{
    public ICustomer Customer { get; set; }
    public void Choose(string customerName)
    {
        Customer = //??? ["Get class where name == customerName"];
        var foo = Customer.GetInvoice();
    }
}

Из-за моего очень ограниченного понимания и запутанного поиска в интернете, я думаю, что мне нужно использовать рефлексию для достижения этой цели, но я до сих пор не смог вернуть определенный интерфейс, установленный во время выполнения, из интерфейса. Как мне добиться этого?

1 Ответ

1 голос
/ 04 июля 2019
var type = Type.GetType(customerName);
ICustomer customer = (ICustomer)Activator.CreateInstance(type);
var invoice = customer.GetInvoice();

Обратите внимание, что customerName должно быть именем, определенным в пространстве имен. Поэтому, если вы держите все свои пользовательские классы в пространстве имен X.Y.Z, вы должны получить тип "X.Y.Z." + customerName.

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