Как определить параметр типа Generi c, который сам ссылается - PullRequest
1 голос
/ 16 апреля 2020

Рассмотрим следующие class/interface определения:

public abstract class Foo<TFoo> : IFoo
    where TFoo: Foo<TFoo>
{
    public TFoo This => (TFoo)this; 
}

public interface IFoo { }

Предположим, у меня также был определен метод, в котором я хотел передать в него TFoo<>:

public static void Test<T>() where T : IFoo { }

Is это возможно без определения класса, который снимает ограничение самоссылающегося типа?

public abstract class Foo2 : Foo<Foo2> { }

Можно ли вызвать метод Test без несамостоятельного класса?

Test<Foo<?>>();// What goes here <?>
Test<Foo2>();  // This works but I don't want to create a Foo2 class..

1 Ответ

0 голосов
/ 16 апреля 2020

Если вы спрашиваете, можете ли вы пропустить указание типа Generi c, то есть:

Test<Foo<>>

, то нет, вы не можете, потому что это выводится во время компиляции.

Как правило, все, что касается обобщенных параметров и параметров типа, указывается во время компиляции, и вы не можете не указать параметр типа Generi c или указать значение по умолчанию.

...