0

背景

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

前几天阅读时,我偶然发现了这个通用类定义,它让我难过一段时间:

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

我很困惑Ton怎么Entity<T>可能是 TypeEntity<T>本身。这似乎是某种奇怪的递归约束。

然后我意识到这个约束可以通过子类来满足(当然,这abstract是对类的要求):

public class Deriver : Entity<Deriver>

在这里, typeT被保证是 type 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这本质上是一种确保在不使用关键字的情况下使用类之前获得类的方法吗?

4

1 回答 1

2

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

var e = new Entity<Deriver>();
于 2013-02-15T10:55:18.820 回答