我在NHibernate类定义中遇到过这个问题:
public class SQLiteConfiguration : PersistenceConfiguration<SQLiteConfiguration>
所以这个类继承自一个由派生类参数化的基类?我的脑袋爆炸了。
有人可以解释这意味着什么以及这种模式有用吗?
(顺便说一下,这不是一个特定于NHibernate的问题。)
答案 0 :(得分:5)
答案 1 :(得分:2)
我在开发双链接树时使用了相同的模式。每个节点有1个父节点和0多个子节点
class Tree<T> where T : Tree<T>
{
T parent;
List<T> children;
T Parent { get; set; }
protected Tree(T parent)
{
this.parent = parent;
parent.children.Add(this);
}
// lots more code handling tree list stuff
}
实施
class Coordinate : Tree<Coordinate>
{
Coordinate(Coordinate parent) : this(parent) { }
static readonly Coordinate Root = new Coordinate(null);
// lots more code handling coordinate systems
}
使用
Coordinate A = Coordinate.Root;
Coordinate B = new Coordinate(A);
B.Parent // returns a Coordinate type instead of a Node<>.
因此,从Tree<>
继承的任何内容都将包含适当类型的父对象和子对象的属性。这个技巧对我来说是纯粹的魔法。