开放的通用类型是否具体?我们如何通过参数化来限定抽象?

sma*_*man 5 c# generics abstract-class interface abstract

您无法创建包含通用参数的类型的实例.

但是,它不是抽象的或界面.

我正在阅读StructureMap TypeExtensions助手,我遇到了:

public static bool IsConcrete(this Type type)
{
    return (!type.IsAbstract && !type.IsInterface);
}
Run Code Online (Sandbox Code Playgroud)

我对解释的方式并不满意,因为看起来如果一个类型是具体的,那么应该有可能有一个它的实例.例如,我很难考虑类似于typeof(List<>).MakeGenericType(typeof(List<>).MakeGenericType(typeof(List<>)))具体类型的东西.

我知道C#中的开放泛型类型和C#中的抽象类型在它们如何偏离具体情况方面有很大差异,但与此同时,它们两者都存在根本性的抽象.如果您认为它们的参数是操作实现,则抽象类和接口可以解释为参数化.然而,这有点偏离主题.

我真正想知道的是一种将这些概念与一致语义统一起来的方法,这种语义并不像是一个List<List<List<>>>可以具体的憎恶的谎言.我们有一种通用的方式来描述这种区别吗?

Man*_*ani 1

我认为以下说法并不“完全”正确:

您无法创建包含泛型参数的类型的实例

泛型类实际上是类(而不是对象)的模板。除非该模板转换为封闭类,否则无法创建实例(对象)。

但是,因为我们没有为通用模板指定类型,所以它没有将其定义为具体/抽象。我们可以创建泛型类型的实例,只要它不是抽象(或接口)!

不确定这是否有帮助。