假设我有两个类:
class Employee
Run Code Online (Sandbox Code Playgroud)
和
class AdvancedEmployee:Employee
Run Code Online (Sandbox Code Playgroud)
我知道这样的事情不会起作用,因为我不能低估C#:
var employee = new Employee();
var advanced = employee as AdvancedEmployee;
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何以有效的方式完成垂头丧气?实际上我在AdvancedEmployee上有一个构造函数,它将Employee作为参数并使用它来注入它的值,基本上是克隆.
更新
为了解决可能重复的数据,我改变了方法,现在AdvancedEmployee包含了一个员工而不是一个员工.例:
class Employee;
class AdvancedEmployee
{
private employee
public AdvancedEmployee(Employee employee){
this.employee = employee
}
}
Run Code Online (Sandbox Code Playgroud)
它不能是cast,它实际上是不同类型之间的转换。
我会添加一个 ctor 或静态成员函数,如AdvancedEmployee FromBase(Employee e), 以从给定的基类型构造派生类型。
创建一个接口。并且由于您无法修改Employee,因此请创建您拥有的适配器:
class EmployeeAdapter : IEmployee
{
private Employee emp;
public EmployeeAdapter(Employee emp) { this.emp = emp; }
public int SomeMethodInEmployee() { return emp.SomeMethodInEmployee(); }
}
class AdvancedEmployee : IEmployee { }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9804 次 |
| 最近记录: |