У меня есть класс, реализующий 2 разных интерфейса, каждый из которых использует сигнатуру метода, скажем, int GetChildData (). Оба они происходят из одного и того же базового интерфейса, который содержит другой метод, скажем, int GetBaseData (). Конкретный класс явно реализует 2 дочерних метода и неявно реализует базовый метод. Когда создается экземпляр класса как дочернего интерфейса и вызывается метод базового интерфейса, возможно ли изнутри вызываемого класса извлечь, какой из дочерних интерфейсов использовался для вызова метода? Код прояснит это. Спасибо
Я не могу использовать неявную реализацию, потому что метод реализации двух дочерних интерфейсов должен иметь различную логику.
internal class Program
{
public interface IBaseInt
{
int GetBaseData();
}
public interface IInterface_1 : IBaseInt
{
int getData();
}
public interface IInterface_2 : IBaseInt
{
int getData();
}
public class Class : IInterface_1, IInterface_2
{
public int GetBaseData()
{
//this.getData(); <--- this does not compile
//here i need to know if 'this' was created as IInterface_1 or as IInterface_2
if (/*???? what do i check ???*/true)
{
return (this as IInterface_1).getData();
}
else if (/*???? what do i check ???*/true)
{
return (this as IInterface_2).getData();
}
}
int IInterface_1.getData() => 1;
int IInterface_2.getData() => 2;
}
private static void Main(string[] args)
{
IInterface_1 int1 = new Class();
IInterface_2 int2 = new Class();
Console.WriteLine("int 1 : " + int1.GetBaseData());
Console.WriteLine("int 2 : " + int2.GetBaseData());
Console.ReadLine();
}
}
результат должен быть '1' или '2' в зависимости от используемого интерфейса.
Редактировать: мой запрос отличается от того, который был предложен как дубликат: там пользователь хотел знать, какой конкретно тип был скрыт за интерфейсом, здесь мне нужно знать, использовался ли интерфейс при создании экземпляра типа,и какой.