#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
, как inTVal
. Таким образом, очевидно, с чем вы имеете дело.
Ответ №1:
InA в этом случае обрабатывается как общий аргумент, а не как имя интерфейса. Вы должны объявить общий аргумент вашего метода GetA по-другому или удалить его вообще. Это должно сработать:
static InA GetA()
{
return new A();
}