我正在尝试在 C# 中创建一个工厂类,该类返回属于或扩展某个基本类型的对象。每次调用getInstance()工厂时我都需要实例化这种类型的新实例,所以我真的只想接受并存储类型本身。在 Java 中,我使用Class<? extends Base>来保存要创建的类,然后调用getInstance()它。
我了解如何使用 C# 中的 Activator 类从 a 创建新对象,System.Type但我不确定的部分是对类类型的约束。我希望能够只接受属于或扩展基类的类型。我意识到我可以更改工厂的 setter 以接受基本类型的实际对象,然后从中检索类型,但我真的不想实例化整个对象只是为了检索 Type 变量。
下面是一个小示例 Java 程序,只是为了演示我需要什么,以防我的问题不清楚。有没有办法在 C# 中做到这一点?
class Program {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Factory.setClass(Base.class);
Base b = Factory.getInstance();
b.Print();
Factory.setClass(Child.class);
b = Factory.getInstance();
b.Print();
}
}
class Factory {
private static Class<? extends Base> type;
// What I want to do in C#.
public static void setClass(Class<? extends Base> newType) {
type = newType;
}
// What I don't want to have to do in C#.
public static void setClassFromObject(Base newTypeObject) {
type = newTypeObject.getClass();
}
public static Base getInstance() throws InstantiationException, IllegalAccessException {
return type.newInstance();
}
}
class Base {
public void Print() {
System.out.println("Hello from base.");
}
}
class Child extends Base {
@Override
public void Print() {
System.out.println("Hello from child.");
}
}
慕的地6264312
郎朗坤
相关分类