Получить, какой интерфейс был использован вызывающим классом во время выполнения - PullRequest
0 голосов
/ 10 октября 2019

У меня есть класс, реализующий 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' в зависимости от используемого интерфейса.

Редактировать: мой запрос отличается от того, который был предложен как дубликат: там пользователь хотел знать, какой конкретно тип был скрыт за интерфейсом, здесь мне нужно знать, использовался ли интерфейс при создании экземпляра типа,и какой.

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