【发布时间】:2018-04-13 04:44:55
【问题描述】:
我正在使用通用工厂类,其中通用部分是正在使用的派生类。正常用法很清楚:BaseClass<DerivedA> C = new BaseClass<DerivedA>(). 现在虽然我正试图将属性注入到我使用这些类的类中。为此,我尝试将 Type 作为参数提供(以便我可以注入正在使用的派生类)。
尽管我在寻找例子并尝试自己,但现在我有点不知所措。我现在想知道:这样的构造是否可以使用?如果是这样,我如何实例化该类并使用 Exists 和 ExistsB?
用法:
public class MyMainClass
{
object _ClassInstance; // BaseClass<DerivedA> or BaseClass<DerivedB>
public MyyMainClass(Type typeIWant)
{
.....
}
}
....
MyMainClass a = new MyMainClass(typeof(DerivedA));
MyMainClass b = new MyMainClass(typeof(DerivedB));
通用类:
public abstract class BaseClass<T> where T: BaseClass<T>, new()
{
...
public bool Exists(int a) {...}
}
派生类:
public class DerivedA :BaseClass<DerivedA>
{
...
}
public class DerivedB :BaseClass<DerivedB>
{
...
public bool ExistsB(string a) {...}
}
【问题讨论】:
-
你为什么不让 MyMainClass 也通用呢?所以你可以通过 Generic Type 参数?而且您将拥有内部字段类型安全而不是“对象”。
-
@fildor 老实说,到目前为止我还没有想到那种方式(“mymainclass”在我的程序中是 Web 服务的业务逻辑,并没有考虑到使那个通用的,但老实说,我喜欢这个主意。)
-
不清楚您在寻找什么。请详细说明或分享一些伪代码以显示您的要求。
-
我认为你被设计模式缠住了,以至于忘记了保持简单。请尝试澄清问题,不清楚您在问什么。
-
@Reza 我不确定你的意思。我问我如何才能最好地实例化这些类,以便我可以使用 Exists 和/或 ExistsB(并且还可以自动完成来显示它们)