Create child object in parent constructor

别来无恙 提交于 2019-12-10 18:17:59

问题


Is it possible to create an instance of a child object using the parent's constructor and passing it some kind of parameter (a string, in this case) to tell it the type of child that should be created?


回答1:


No. In C#, you create an instance of a class, then the runtime calls its constructor. By the time the constructor executes it's too late to pick another type.

However, a derived class' constructor always calls one of its base class' constructors, and you can use that to your advantage (to avoid repeating code).

People often create factories to do what you're talking about. For example, given the classes Parent, Child1:Parent, and Child2:Parent, you might write a factory like this:

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");
        }
    }
}



回答2:


If I understand you correctly, you want to create a class A and a class B that derives from A. Then you want to call new A("B") and this should return you a new B object?

That is not possible.

However, I don't know what you are trying to accomplish, but maybe you should check out reflection, because it allows you to create an instance of a class by its name string.

http://msdn.microsoft.com/en-us/library/dex1ss7c.aspx

var obj = myAssembly.CreateInstance("myNamespace.myClassB");



回答3:


Not sure if I understood right, but here is what I understood :)

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;
    }
}


来源:https://stackoverflow.com/questions/4399665/create-child-object-in-parent-constructor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!