C# “与”的区别是什么;A类:B<;C>&引用;及;A类<;T>;:B<;T>;其中T:C";?

C# “与”的区别是什么;A类:B<;C>&引用;及;A类<;T>;:B<;T>;其中T:C";?,c#,generics,C#,Generics,我试图从泛型类创建一个派生类,我想知道它们之间的区别是什么 public class A<T> : B<T> where T : C { } 公共类A:B,其中T:C { } 及 公共A类:B类 { } 在类A中可能没有代码,因为(目前)它的行为与类B没有区别。我只想区分这两个类 提前感谢。这是一个示例: 在 通用类是C在第二个选项中,您将得到一个非通用类a,而在第一个选项中,您将得到通用类a说您有一个类 public class D : C { } 那么,在您的

我试图从泛型类创建一个派生类,我想知道它们之间的区别是什么

public class A<T> : B<T> where T : C
{
}
公共类A:B,其中T:C
{
}

公共A类:B类
{
}
在类A中可能没有代码,因为(目前)它的行为与类B没有区别。我只想区分这两个类

提前感谢。

这是一个示例:


通用类是
C

在第二个选项中,您将得到一个非通用类
a
,而在第一个选项中,您将得到通用类
a
说您有一个类

public class D : C
{
}
那么,在您的第一个示例中,以下内容是有效的

var a = new A<D>
var a=新的a
您可以为
T
使用最终从C派生的任何类


而您的第二个代码是硬编码的,以B使用C作为genric类型参数,并且不是泛型的。

在您的第一个示例中,
A
是一个泛型类,类型为
C
。它还继承了
C
类型的类
B

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

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


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

在第一个示例中,您将
作为一个类
作为一个泛型类,在实例化该类时必须给出
T

A<C> instance = new A<C>();
另一个区别

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

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

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

public class D : C
{
}
var a = new A<D>
A<C> instance = new A<C>();
A instance = new A();