1

我想做这样的事情:

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() 是对象类型,而不是我应该是 P:Exception

有谁知道是否可以做到这一点?

4

1 回答 1

2

这基本上是不可能的。

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

class TException<P> : P

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

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

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

请注意,您不能从类型参数派生泛型类的原因是必须保证它在编译时工作,但是没有语言支持限制类型以使其成为非密封类。

于 2013-06-24T12:24:13.473 回答