7

我正在尝试从泛型类创建派生类,我想知道它们之间有什么区别

public class A<T> : B<T> where T : C
{
}

public class A: B<C>
{
}

在 A 类内部可能没有代码,因为(目前)它的行为与 B 类没有什么不同。我只想区分这两个类。

提前致谢。

4

5 回答 5

8

假设你有一堂课

public class D : C
{
}

然后在您的第一个示例中,以下内容有效。

var a = new A<D>

您可以使用任何T最终派生自 C 的类。

而您的第二个代码被硬编码为让 B 使用 C 作为通用类型参数并且不是通用的。

于 2013-10-04T14:04:48.373 回答
2

它是C# 中带有泛型的约束,例如:

public class A<T> : B<T> where T : C
{
}

泛型T必须是它的C类型或子对象(什么是抽象)。

public class A: B<C>
{
}

通用的是C.

于 2013-10-04T14:04:18.387 回答
2

在您的第一个示例中,A是一个泛型类,类型为C。它也继承自Btype 类C

您的第二个示例具有以下属性:

A不是泛型类。它继承自Btype 的类C

因此,它们实际上是完全不同的。

于 2013-10-04T14:04:53.327 回答
1

在第一个示例中,您将设为实例化类时必须给出A Class 的泛型类。T

A<C> instance = new A<C>();

在第二个示例中, TheA Class 不是泛型类,因为在实例化时A Class不需要声明,T因为它根据声明在幕后自动完成A Class

A instance = new A();

另一个区别

如果您有给定的分层继承树:

在此处输入图像描述

在第一个示例中,当您实例化A类时,每个继承的类都可以用作T.

在第二个示例中,您可以实例化A类并指定C2类,因此只能在类中C2使用继承自的A类。

于 2013-10-04T14:07:39.953 回答
0

在第二个选项中,您将得到一个非泛型类A,而在第一个选项中,您将拥有一个泛型类A

于 2013-10-04T14:04:29.513 回答