2010-12-09 72 views
3

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

+0

你尝试了吗? – tenfour 2010-12-09 15:08:43

+1

子对象的类型是否继承父类型?如果是这样,你正在寻找工厂方法。 – 2010-12-09 15:17:24

回答

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

如果我正确地理解了你,你想创建一个类A和一个类B来自A。那么你想打电话new A("B"),这应该返回给你一个新的B对象?

这是不可能的。

但是,我不知道你在做什么,但也许你应该检查出反射,因为它允许你通过它的名称字符串创建一个类的实例。

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

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