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

3 回答 3

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 关键字从派生类调用父构造函数。除非你真的需要一个工厂方法来构造你的对象,否则我会朝这个方向发展。

于 2013-02-21T15:57:59.047 回答
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;
}

就像它有硬币的另一面一样:调用者必须调用InitProperties方法才能正确初始化对象。

如果您不关心序列化/反序列化,请坚持使用构造函数,实际上在每种类型的 ctor 中调用此方法(Parent, Child

于 2013-02-21T15:55:03.123 回答
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");

在我看来,这是一种非常巧妙的方法。

于 2013-02-21T15:58:18.223 回答