我正在尝试编写Update
方法,该方法将更新给定对象的属性。为了使示例简单易想,我有以下类:
public class Person
{
public string Name;
public virtual void Update(Person person)
{
this.Name= person.Name;
}
}
public class Employee : Person
{
public string Id;
public override void Update(Person person)
{
base.Update(person);
var employee = person as Employee;
this.Id= employee.Id;
}
}
public class Manager: Employee
{
public string Title;
public override void Update(Person person)
{
base.Update(person);
var manager = person as Manager;
this.Title = manager.Title;
}
}
这只是一个要转储的例子:我有很深的继承水平。在每个级别中,都有更多的属性添加到子类型。我正在尝试为所有子类型编写一个update
方法。
在Update
方法中进行铸造似乎不是一个好主意。
我正在考虑使用use generic method。如果我有2级继承,那会很好。但是,如果继承太深,我需要使所有子类型通用直到最后一个子代。
是否有更好的方法来Update
?
答案 0 :(得分:0)
您可以通过为子类型添加Update
重载来避免强制转换,如下所示:
public class Person
{
public string Name;
public virtual void Update(Person person)
{
this.Name = person.Name;
}
}
public class Employee : Person
{
public string Id;
public virtual void Update(Employee employee)
{
base.Update(employee);
this.Id = employee.Id;
}
}
public class Manager: Employee
{
public string Title;
public void Update(Manager manager)
{
base.Update(manager);
this.Title = manager.Title;
}
}
一个可能的缺点是,这会使基本版本保持原位并且可以在所有级别上使用,因此现在您可以执行以下操作:
var p = new Person { ... }
var m = new Manager { ... }
m.Update(p); // Updates only the Name
如果要防止这种情况,则必须在每个子类中重写Update(<base type> x)
并引发某种(运行时)异常。