如何重写方法返回类型
本文关键字:方法 返回类型 重写 何重写 | 更新日期: 2023-09-27 18:29:11
我有一个父类和许多子类:
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;}
}
现在我有了一个创建子类的方法:
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
我读过这篇文章,但看起来很难
有什么建议吗?
生成子对象,然后从父对象调用一些函数来设置特定于父对象的值。然后从子级调用函数以生成特定于子级的值。
父级特定的初始化可以在父级的构造函数中。
扩展辩证法的答案,下面是如何做到这一点:
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;
}
}
使用构造函数
在基类和子类中指定一个构造函数,使用以下构造函数:
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");
}
}
(不确定为什么需要静态方法来创建对象,如果静态方法是子类的一部分,并且您只想通过此方法公开对象创建,则使您的子构造函数private
)