2013-02-21 111 views
-2

我想知道是否有人可以帮助我填充派生类的基本属性的最佳方式。我想使用一种方法来填充基地的属性,无论是使用基地还是儿童。填充基础属性的最佳方式是什么?

这里是什么,我问一个例子:

public class Parent 
{ 
    public string Id {get; set;} 
} 

public class Child : Parent 
{ 
    public string Name {get; set;} 
} 

public Parent GetParent(int ID) 
{ 
    Parent myParent = new Parent(); 
//Lookup and populate 
return Parent; 
} 

public Child GetChild(string name) 
{ 
Child myChild = new Child(); 

//Use the GetParent method to populate base items 
//and then 
//Lookup and populate Child properties 

return myChild; 
} 
+2

通过构造函数填充? – sll 2013-02-21 15:54:20

+0

可能重复[填充基类与子类?](http://stackoverflow.com/questions/3649354/populate-base-class-along-with-child-class) – MethodMan 2013-02-21 15:55:22

+0

你可以做什么'sll'有建议或者你可以采取继承路线.. – MethodMan 2013-02-21 15:55:59

回答

2

的构建函数我想你可能会过于复杂的事情一点。看看这段代码中使用继承和构造函数初始化对象:

public class Parent 
{ 
    public string Id {get; set;} 

    public Parent(string id) 
    { 
     Id = id; 
    } 
} 

public class Child : Parent 
{ 
    public string Name {get; set;} 

    public Child(string id, string name) : base(id) // <-- call base constructor 
    { 
     Name = name; 
    } 
} 

它使用构造函数初始化和base keyword来调用派生类的父类的构造。除非你真的需要一个工厂方法来构建你的对象,否则我会去这个方向。

1

事情是这样的,如果你不想做的constructor

注意:constructor并不总是被调用,特别是如果类型使用某些序列化器desirialized。

public class Parent 
{ 

    public string Id {get; set;} 

    public virtual void InitPorperties() { 
     //init properties of base 
    } 

} 


public class Child : Base { 

    public override void InitProperties() { 
     //init Child properties 
     base.InitProperties(); 
    } 
} 

这之后您可以使用它像:

public Parent GetParent(int ID) 
{ 
    var myParent = new Parent(); 
    parent.InitProperties(); 
    return myParent; 
} 

public Parent GetChild(int ID) 
{ 
    var child= new Child(); 
    child.InitProperties(); 
    return child; 
} 

正如任何有硬币的另一面:调用者必须调用在奥德InitProperties方法来得到正确初始化对象。

如果串行/ desialization是不是在你的情况的担忧,坚持构造,在实践中调用这个方法里面每一种类型(ParentChild

1

如果你不想使用标准的办法只有

Child myChild = new Child(); 
    myChild.Name = "name"; 
    myChild.Id = "1"; 

您可以通过这样的构造填充它们。

public class Parent 
    { 
     public Parent(string id) 
     { 
      Id = id; 
     } 

     public string Id { get; set; } 
    } 

    public class Child : Parent 
    { 
     public Child(string id, string name) 
      : base(id) 
     { 
      name = Name; 
     } 

     public string Name { get; set; } 
    } 

当你isntanciate它

 Child myChild = new Child("1", "name"); 

这在我看来是一个相当巧妙的方法来做到这一点。

相关问题