在父构造函数中创建子对象

时间:2010-12-09 15:06:38

标签: c# oop inheritance constructor

是否可以使用父的构造函数创建子对象的实例并向其传递某种参数(在本例中为字符串)以告诉它应该创建的子类型?

3 个答案:

答案 0 :(得分:8)

没有。在C#中,您创建一个类的实例,然后运行时调用其构造函数。到构造函数执行时,为时已晚,无法选择其他类型。

但是,派生类的构造函数总是调用它的一个基类'构造函数,你可以使用它来获得优势(以避免重复代码)。

人们经常创建factories来做你正在谈论的事情。例如,根据类ParentChild1:ParentChild2: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;
    }
}