是否可以使用父的构造函数创建子对象的实例并向其传递某种参数(在本例中为字符串)以告诉它应该创建的子类型?
答案 0 :(得分:8)
没有。在C#中,您创建一个类的实例,然后运行时调用其构造函数。到构造函数执行时,为时已晚,无法选择其他类型。
但是,派生类的构造函数总是调用它的一个基类'构造函数,你可以使用它来获得优势(以避免重复代码)。
人们经常创建factories来做你正在谈论的事情。例如,根据类Parent
,Child1:Parent
和Child2:Parent
,您可以编写这样的工厂:
public class ParentFactory {
public Parent CreateParent(string type) {
switch(type) {
case "Child1":
return new Child1();
case "Child2":
return new Child2();
default:
throw new ArgumentException("Unexpected type");
}
}
}
答案 1 :(得分:1)
如果我理解正确,您需要创建一个 A 类和一个源自A 的 B类。那么你想调用new A("B")
,这会给你一个新的B对象吗?
这是不可能的。
但是,我不知道你想要完成什么,但也许你应该看看反射,因为它允许你通过名字字符串创建一个类的实例。
http://msdn.microsoft.com/en-us/library/dex1ss7c.aspx
var obj = myAssembly.CreateInstance("myNamespace.myClassB");
答案 2 :(得分:0)
不确定我是否理解正确,但这是我所理解的:)
public class parent:child
{
private child childObj;
public parent(string childName)
{
childObj = new child(childName);
}
}
public class child
{
private string name;
public child(string _name)
{
name = _name;
}
}