填充基本属性的最佳方法是什么?

时间:2013-02-21 15:52:23

标签: c# inheritance

我想知道是否有人可以帮助我填充派生类的基本属性的最佳方法。我想使用一种方法来填充基数的属性,无论是使用基数还是子语。

以下是我要问的一个例子:

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

如果您不想在constructor中执行此操作,请执行以下操作。

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

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

任何东西都有硬币的另一面:调用者必须在oder中调用InitProperties方法才能获得正确的初始化对象。

如果在您的情况下不需要序列化/去唾液化,请坚持使用构造函数,实际上在每种类型的ctors中调用此方法(ParentChild

答案 2 :(得分: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; }
    }

当你没有结束时

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

在我看来,这是一个非常简洁的方法。