如何使用带参数的通用基类声明泛型类的构造函数?

时间:2013-06-24 12:09:23

标签: c#

我想做这样的事情:

abstract class Exception : ApplicationException
{
    protected Exception(string _message) : base(_message)
    {            
    }

    public Exception()
        : base()
    {
    }
}



class TException<P> : P
    where P : Exception
{
    static string messageStd;

    public TException()
        : base(messageStd)
    {
    }
}

我认为TException下的任何一个类都应该是一个Exception和TException

就像这样:

C is TException<B>, where
B is TException<A>, where
A is TException<Exception>

所以我们有:

C is C:B
B is B:A
A is A:Exception

但是C#告诉我构造函数中的base()是object类型,而不是我应该是P:Exception

有人知道是否有可能做到这一点?

1 个答案:

答案 0 :(得分:2)

这根本不可能。

问题是您不能从类型参数派生泛型类,而您正尝试使用

class TException<P> : P

如果你真的尝试编译代码,你会看到这个错误:

Cannot derive from 'P' because it is a type parameter

您看到的另一个错误(关于Object()基础)是一个工件。

请注意,无法从类型参数派生泛型类的原因是必须保证在编译时才能使用它,但是没有语言支持来约束类型,因此它是一个非密封类