实例化类型约束的泛型类,而不对其进行子类化

时间:2013-02-15 10:51:03

标签: c# generics generic-constraints

背景

[如果您对背景不感兴趣,请跳至问题]

我在前几天阅读时偶然发现了这个通用的类定义,并且让我困扰了一段时间:

public abstract class Entity<T> where T : Entity<T>

我对T Entity<T> Entity<T>本身abstract的类型感到困惑。这似乎是一种奇怪的递归约束。

然后我意识到这个约束可以通过子类化来满足(当然,这是public class Deriver : Entity<Deriver> 对类的要求):

T

此处,Entity<T>类型保证属于Deriver类型,因为Entity<Deriver>来自class Entity<T> where T : Entity<T>

问题

无论如何,这让我想知道,如果课程不是抽象的,我们可以直接进行即时表达吗?

所以给出

Entity<T>

我们可以直接点Entity<SomeClass> e = new Entity<SomeClass>(); 吗?

显然我们不能说:

SomeClass

因为where T : Entity<T>不满足约束abstract

忽略明显的“你为什么要那样做?”这本质上是一种确保在不使用{{1}}关键字的情况下使用它之前对类进行修改的方法吗?

1 个答案:

答案 0 :(得分:2)

这个假设是不正确的。以下将编译:

var e = new Entity<Deriver>();