【发布时间】:2011-05-22 22:18:19
【问题描述】:
是否可以使用父对象的构造函数创建子对象的实例并传递某种参数(在本例中为字符串)来告诉它应该创建的子对象的类型?
【问题讨论】:
-
子对象的类型是否继承自父对象的类型?如果是这样,您正在寻找工厂方法。
-
+1 奥利弗:听起来对我来说也绝对像工厂。
标签: c# oop inheritance constructor
是否可以使用父对象的构造函数创建子对象的实例并传递某种参数(在本例中为字符串)来告诉它应该创建的子对象的类型?
【问题讨论】:
标签: c# oop inheritance constructor
没有。在 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");
}
}
}
【讨论】:
如果我对您的理解正确,您想创建一个类 A 和一个派生自 A 的类 B。那么你想调用new A("B"),这应该会返回一个新的 B 对象吗?
这是不可能的。
但是,我不知道您要完成什么,但也许您应该查看 reflection,因为它允许您通过名称字符串创建类的实例。
http://msdn.microsoft.com/en-us/library/dex1ss7c.aspx
var obj = myAssembly.CreateInstance("myNamespace.myClassB");
【讨论】:
不确定我是否理解正确,但这是我理解的:)
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;
}
}
【讨论】: