我有一个父类和很多子类:
public class ParentViewModel
{
public int Id{set;get;}
public string Name{set;get;}
<..and another 10 properties..>
}
public class ChildViewModel_1:ParentViewModel
{
public string Notes{set;get;}
}
现在我有一个创建Child类的方法:
public static ChildViewModel_1 MakeChild_1()
{
var child= new ChildViewModel_1
{
Id = ...
Name = ...
...And another parent properties...
Note = ...
}
return child;
}
他们有很多带有父类属性的类似代码 我如何使方法来填充父类字段并使用它来创建子类?
我试过了:
public static ParentViewModel MakeParent()
{
var parent = new ParentViewModel
{
Id = ...
Name = ...
...And another properties...
}
return parent;
}
public static ChildViewModel_1 MakeChild_1()
{
var parent = MakeParent();
var child= parent as ChildViewModel_1;
child.Note = ...
return child;
}
但是我希望得到child = null
我看了this,但看起来很困难
有什么建议吗?
答案 0 :(得分:2)
创建子项,然后从父项调用某些函数来设置父项特定值。然后从子函数调用函数以生成子特定值。
父特定的初始化可以在父的构造函数中。
答案 1 :(得分:1)
扩展Dialecticus&#39;回答,你可以这样做:
class Parent
{
public string Name { get; set; }
public int ID { get; set; }
}
class Child : Parent
{
public string Note { get; set; }
}
class Factory
{
public static Parent MakeParent()
{
var parent = new Parent();
Initialize(parent);
return parent;
}
private static void Initialize(Parent parent)
{
parent.Name = "Joe";
parent.ID = 42;
}
public static Child MakeChild()
{
var child = new Child();
Initialize(child);
child.Note = "memento";
return child;
}
}
答案 2 :(得分:0)
在基类和子类中指定构造,使用构造函数,如:
public class ParentViewModel
{
public int Id { set; get; }
public string Name { set; get; }
protected ParentViewModel(int Id, string Name)
{
this.Id = Id;
this.Name = Name;
}
}
public class ChildViewModel_1 : ParentViewModel
{
public string Notes { set; get; }
public ChildViewModel_1(int Id, string Name, string Notes)
: base(Id, Name) //Calling base class constructor
{
this.Notes = Notes;
}
public static ChildViewModel_1 MakeChild_1()
{
return new ChildViewModel_1(0, "Some Name", "Some notes");
}
}
(不确定为什么需要静态方法来创建对象,如果静态方法是子类的一部分,并且您只想通过此方法公开对象创建,那么请创建子构造函数{{1} })