Обновление: Мой первоначальный план состоял в том, чтобы использовать его для повышения и понижения. Я просто хотел, чтобы мой метод мог возвращать разные классы на основе разных ответов с сервера.Как использовать интерфейс для доступа к классам, которые его реализовали?
Я пытаюсь понять расширенное использование интерфейса. Допустим, у меня есть лицо, как среди ниже:
public interface IMyInterface
{
}
У меня есть два класса, реализующие вышеуказанный интерфейс, как сильфона.
public class A:IMyInterface
{
public string AName { get; set; }
}
public class B : IMyInterface
{
public string BName { get; set; }
}
Теперь у меня есть четыре метода, как показано ниже:
public IMyInterface CreateRawResponse()
{
if (condition)
{
return new A
{
AName = "A"
};
}
else
{
return new B
{
BName = "B"
};
}
}
public string CreateResponse(IMyInterface myInterface)
{
return myInterface. // I would like to access the properties of the parameter, since its actually a class
}
public string CreateResponseForA(A a)
{
return a.AName;
}
public string CreateResponseForB(B b)
{
return b.BName;
}
Наконец я пытаюсь вызвать методы, как это:
var obj = new Program();
var KnownResponse = obj.CreateRawResponse(); // Lets say I know I will get type A
var test1 = obj.CreateResponseForA(KnownResponse); //But I can't call like this, because CreateResponseForA() is expecting IMyInterface as parameter type.
var UknownResponse = obj.CreateRawResponse(); // Lets say I don't know the response type, all I know is it implemented IMyInterface
var test2 = obj.CreateResponse(UknownResponse); // I can call the method but can access the properties of the calling type in CreateResponse() mehtod.
Как справиться с такой ситуацией? Я считаю, что может быть какой-то шаблон проектирования, чтобы решить эту проблему, но я не привык к разработке шаблонов. Любые советы были бы очень полезными.
Если вы хотите свойство быть доступны в интерфейсе, добавьте его к этому интерфейсу. –
пусть интерфейс имеет общий интерфейс 'property IMyInterface {string Name {get; }} ' – Nkosi
Ваш интерфейс пуст. Он должен иметь доступное свойство, которое является общим для классов, которые его реализуют, чтобы оно использовалось так, как вы хотите. В противном случае ваш интерфейс просто бессмысленен. –