我想知道是否有人可以帮助我填充派生类的基本属性的最佳方法。我想使用一种方法来填充基数的属性,无论是使用基数还是子语。
以下是我要问的一个例子:
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;
}
答案 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中调用此方法(Parent
,Child
)
答案 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");
在我看来,这是一个非常简洁的方法。