我想做这样的事情:
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
有人知道是否有可能做到这一点?
答案 0 :(得分:2)
这根本不可能。
问题是您不能从类型参数派生泛型类,而您正尝试使用
class TException<P> : P
如果你真的尝试编译代码,你会看到这个错误:
Cannot derive from 'P' because it is a type parameter
您看到的另一个错误(关于Object()基础)是一个工件。
请注意,无法从类型参数派生泛型类的原因是必须保证在编译时才能使用它,但是没有语言支持来约束类型,因此它是一个非密封类