Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在父构造函数中创建子对象_C#_Oop_Inheritance_Constructor - Fatal编程技术网

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

C# 在父构造函数中创建子对象,c#,oop,inheritance,constructor,C#,Oop,Inheritance,Constructor,是否可以使用父对象的构造函数创建子对象的实例,并向其传递某种参数(在本例中为字符串)以告知应创建的子对象的类型?否。在C#中,创建类的实例,然后运行时调用其构造函数。当构造函数执行时,选择其他类型已经太晚了 但是,派生类的构造函数总是调用其基类的构造函数之一,您可以利用它来发挥自己的优势(避免重复代码) 人们经常创造来做你所说的事情。例如,给定类Parent、Child1:Parent和Child2:Parent,可以编写如下工厂: public class ParentFactory {

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

否。在C#中,创建类的实例,然后运行时调用其构造函数。当构造函数执行时,选择其他类型已经太晚了

但是,派生类的构造函数总是调用其基类的构造函数之一,您可以利用它来发挥自己的优势(避免重复代码)

人们经常创造来做你所说的事情。例如,给定类
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。然后你想调用
newa(“B”)
,这应该会返回一个新的B对象

这是不可能的。

但是,我不知道您想要完成什么,但是也许您应该检查一下反射,因为它允许您通过名称字符串创建类的实例


子对象的类型是否继承自父对象的类型?如果是这样的话,你正在寻找一种工厂化的方法。奥利弗:听起来我也很喜欢工厂。我推荐雷丁:不太喜欢。它与GenericTypeTea提供的答案相同,这不是我想要的。
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;
    }
}
var obj = myAssembly.CreateInstance("myNamespace.myClassB");