c# - 派生类的一般约束

标签 c# generics subsonic constraints

我有 A 类:

public class ClassA<T>

B 类派生自 A:

public class ClassB : ClassA<ClassB>

C 类派生自 B 类:

public class ClassC : ClassB

现在我有了一个带有约束的通用方法

public static T Method<T>() where T : ClassA<T>

好的,现在我要调用:

ClassC c = Method<ClassC>();

但我收到编译错误: Type argument 'ClassC' does not inherit from or implement the constraint type 'ClassA<ClassC>.

然而,编译器将允许:

ClassB b = Method<ClassB>();

我的理解是这失败了,因为 ClassC继承ClassA<ClassB>而不是 ClassA<ClassC>

我真正的问题是,是否可以创建一个派生自 ClassB 的类?可以以某种方式与泛型方法一起使用?

这看起来像是泛型被过度使用,我同意。我正在尝试创建从单独项目中的亚音速数据对象派生的业务层对象。

注意:我在 < T > 中放置了额外的空格,否则它们会从问题中删除。

最佳答案

那么,您可以将方法更改为:

public static T Method<T,U>() where T : ClassA<U> where U : T

这有帮助吗?如果你不能改变Method当然没有多大用处......

关于c# - 派生类的一般约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/233288/

相关文章:

亚音速多对多

sql-server-2008 - MS SQL 2008 和 Subsonic 3 中的空间数据类型 - 有解决方法吗?

c# - 来自包含 UTF-8 字符的批处理文件的命令行参数会导致问题

c# - 无法为 x64 和 x86 加载文件或程序集 'CefSharp.Wpf;只有一个作品

c# - Roslyn - 查找对具有调用详细信息的方法的所有引用(具体的通用参数)

java - Java 中未绑定(bind)的泛型返回类型

sql-server-2008 - 在 sys.servers 中找不到服务器 'dbo'

c# - 从 memorystream 打开 excel 工作簿

c# - EF 查询以获取所有子集合的并集

java - 从父类(super class)创建 ArrayList 但包含扩展类的对象