【发布时间】:2020-08-26 01:56:58
【问题描述】:
假设我有许多(比如 10 个)类 A1、...、A10 的列表,它们都继承自基类 A,并且我有一个从它们到其他 10 个类 B1 的一对一映射,...,B10。我还有一个通用类MyClass<T> 我希望有一个函数Func(A a),如果输入是A1 的实例,它创建一个MyClass<B1> 实例,如果输入是一个实例,则创建一个MyClass<B2> 实例A2 等。我可以使用 switch 语句来做到这一点,但如果类的数量增加,它就会变得混乱。这样做的好方法是什么?
这是一个具体的例子:假设 A 类是 Cat 和 Dog,B 类是 Foo 和 Bar,我还有另一个 Generator 类来生成这些实例。
public class Generator{
public Foo Generate(Cat c){
// some code
}
public Bar Generate(Dog d){
// some code
}
}
我下面有一个通用类
public class MyClass<T>{
private T _t;
public MyClass(T t){
this._t = t;
}
}
现在在代码中我想做这样的事情
Generator gen = new Generator();
dynamic animal = new Dog();
var result = gen.Generate(animal); // can be of type Foo or Bar
var cl = new MyClass(result); // does not compile!
最后一行没有编译,因为它缺少泛型类型参数。
如果需要更多详细信息,请告诉我!
【问题讨论】:
-
你能分享一些代码来更好地了解你需要什么吗?即 A 类之一,B 类之一,以及您当前正在进行的映射?
-
好主意——刚刚编辑了问题。
-
你能分享
MyClass的目的是什么吗?我知道现在的问题是由于泛型参数,它不能被实例化(至少不是很好)。该通用字段如何以及在何处使用?
标签: c# generics polymorphism