Функция не может возвращать тип с тем же интерфейсом, что и возвращаемый тип

#c# #.net #interface

#c# #.net #интерфейс

Вопрос:

У меня есть простая программа:

 class Program
    {
        static void Main(string[] args)
        {
            InA testing = GetA();
        }

        static InA GetA<InA>()
        {
            return new A();
        }
    }

    public interface InA
    {
        void test();
    }

    public class A : InA
    {
        public void test()
        {
            throw new NotImplementedException();
        }
    }
  

Почему экземпляр A не может быть возвращен из GetA()? A реализует интерфейс InA.

введите описание изображения здесь

Комментарии:

1. Что с избыточным универсальным типом GetA<InA> ? Это означает, что в области действия метода InA относится к общему типу, а не к интерфейсу. Точно так же, как интерфейсы должны начинаться с буквы I , по соглашению, все универсальные типы должны начинаться с буквы T , как in TVal . Таким образом, очевидно, с чем вы имеете дело.

Ответ №1:

InA в этом случае обрабатывается как общий аргумент, а не как имя интерфейса. Вы должны объявить общий аргумент вашего метода GetA по-другому или удалить его вообще. Это должно сработать:

 static InA GetA()
{
    return new A();
}