C#异常继承语法w /泛型

时间:2011-01-08 03:38:22

标签: c# generics inheritance syntax design-patterns

我在NHibernate类定义中遇到过这个问题:

public class SQLiteConfiguration : PersistenceConfiguration<SQLiteConfiguration>

所以这个类继承自一个由派生类参数化的基类?我的脑袋爆炸了。

有人可以解释这意味着什么以及这种模式有用吗?

(顺便说一下,这不是一个特定于NHibernate的问题。)

2 个答案:

答案 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<>继承的任何内容都将包含适当类型的父对象和子对象的属性。这个技巧对我来说是纯粹的魔法