首页 > 解决方案 > 具有多重继承的泛型类

问题描述

我正在尝试在 c# 中实现一些特定的东西,但我不知道它是否有名字(或者即使它是一个好习惯)。我试图尽可能简化代码,因为这是一个通用问题(不是双关语,我的意思是它不依赖于实现的其余部分)基本上我有一个通用类 Class1,一个类A,从 A 继承的类 B,以及从 Class1 继承的另一个类 Class2,以 B 作为泛型参数。问题是我在尝试投射时收到错误“无法从 'Class2' 转换为 'Class1'”。

我尝试了不同的组合,花了几个小时检查了几十个链接,但到目前为止,我似乎找不到这个确切问题的答案。请记住,我对编程还很陌生(几年,但我是自学的)

public class Class1<T> where T : A
{
    public string name;
}

public class Class2 : Class1<B> { }

public class A { }
public class B : A { }

//if I change the parameter type to Class1<B>, but that defeats the purpose
//of being able to call this function with any class that extends Class1
void TestFunction(Class1<A> test)
{
    Debug.Log(test.name);
}

//I basically want to do this
var instance = new Class2();

//I can't do this because instance is of type Class2 but can't be converted
//to Class1<A>    
TestFunction(instance);

我希望能够拥有扩展 class1 的类,如 class2,以及扩展 A 的参数,如 B,但由于我无法完全理解的原因,它不能以这种方式工作。谢谢你的帮助!我有点不知所措,觉得我永远找不到适合我水平的解决方案。

标签: c#unity3dgenerics

解决方案


要使这个工作正常,您需要以通用方式设置函数,提供编译器将其解析为A. 不得不重申约束并不是很好,但它确实有效。

static void TestFunction<T>(Class1<T> test) where T : A
{

}

推荐阅读