Я читаю книгу "Язык программирования С#", 4-е издание, Андерс Хейлсберг и т.д.
Существует несколько определений, которые немного скручиваются:
несвязанный общий тип: объявление общего типа само по себе обозначает несвязанный общий тип...
построенный тип. Тип, который включает по крайней мере один аргумент типа, называется построенным типом.
открытый тип. Открытый тип - это тип, который включает параметры типа.
закрытый тип. Закрытый тип - это тип, который не является открытым.
несвязанный тип: относится к неродному типу или несвязаному родовому типу.
связанный тип: относится к неродному типу или построенному типу. [аннотировать] ERIC LIPPERT: Да, неродственные типы считаются связанными и несвязанными.
Вопрос 1, ниже того, что я указал правильно?
int //non-generic, closed, unbound & bound,
class A<T, U, V> //generic, open, unbound,
class A<int, U, V> //generic, open, bound, constructed
class A<int, int, V> //generic, open, bound, constructed
class A<int, int, int> //generic, closed, bound, constructed
Вопрос 2. В книгах говорится: "Несвязанный тип относится к объекту, объявленному объявлением типа. Несвязанный общий тип сам по себе не является типом и не может использоваться как тип переменной, аргумент или возвращаемое значение или как базовый тип. Единственной конструкцией, в которой может ссылаться несвязанный общий тип, является тип выражения (§7.6.11) ". Хорошо, но ниже - небольшая программа тестирования, которая может скомпилировать:
public class A<W, X> { }
// Q2.1: how come unbounded generic type A<W,X> can be used as a base type?
public class B<W, X> : A<W, X> { }
public class C<T,U,V>
{
// Q2.2: how come unbounded generic type Dictionary<T, U> can be used as a return value?
public Dictionary<T,U> ReturnDictionary() { return new Dictionary<T, U>(); }
// Q2.3: how come unbounded generic type A<T, U> can be used as a return value?
public A<T, U> ReturnB() { return new A<T, U>(); }
}