c# - 具有多重继承的泛型类
问题描述
我正在尝试在 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,但由于我无法完全理解的原因,它不能以这种方式工作。谢谢你的帮助!我有点不知所措,觉得我永远找不到适合我水平的解决方案。
解决方案
要使这个工作正常,您需要以通用方式设置函数,提供编译器将其解析为A
. 不得不重申约束并不是很好,但它确实有效。
static void TestFunction<T>(Class1<T> test) where T : A
{
}
推荐阅读
- azure - 在创建另一个后端池和负载均衡器规则之前删除
- c# - 运行所选代码生成器时出错:无法检索 xxx.Goal.. 的元数据,由应用程序用户的外键引起
- django - 克隆项目失败后运行迁移的 Django
- networking - 哪种集群大小最适合蜂窝通信?
- struct - Julia中的不完整初始化
- java - 如何使用 Java 中的 .getparent 方法重命名文件来解决此错误?
- javascript - cakephp2.10 表单结果的停止循环
- python - 字典输出在烧瓶python中的requestText中转换为字符串?
- asp.net - Blazor 服务器端 - 托管
- python - 结帐在 Django 中不起作用,即使有测试卡详细信息