我有以下類:轉換派生類屬性至基礎,使通用方法
public abstract class EntityBase
{
}
public class Employee:EntityBase
{
public string Name {get;set}
public string Address {get;set}
}
public class Salary:EntityBase
{
public int Basic {get;set}
public int DA {get;set}
}
我已經另一個類/方法返回實體的數據作爲基礎類型:
public abstarct class EntityDataBase
{
EntityBase GetEntityData();
}
public class EmployeeData:EntityDataBase
{
EntityBase GetEntityData()
{
Employee emp=new Employee();
return emp;
}
}
public class SalaryData:EntityDataBase
{
EntityBase GetEntityData()
{
Salary sal=new Salary();
return sal;
}
}
我有其他類顯示實體類型。我想要寫在類中顯示任何entities.I的數據的通用方法已經實現了類/方法如下:
public class DisplayEntities
{
public EntityDataBase entityData {get;set}
public EntityDataBase entity {get;set}
public DisplayData()
{
entity = entityData.GetEntityData();
//Display Data using some display mechanism
}
}
我使用的代碼之後,從客戶端代碼:
Employee emp = new Employee();
EmployeeData empData = new EmployeeData();
DisplayEntities dispEntity= new DisplayEntities();
dispEntity.entityData = empData;
dispEntity.entity= emp;
dispEntity.DisplayData();
但是代碼無法顯示實體的數據。我可以如何編寫一個通用方法來將任何實體類型傳遞給方法?
爲什麼仿製藥?只需在'EntityBase'中添加一個抽象方法即可。 – Rotem 2014-11-02 16:48:14
我什至不知道這個代碼如何編譯。語句'dispEntity.entity = emp;'應該會導致編譯時錯誤,因爲'entity'字段的類型爲'EntityDataBase',而'emp'變量的類型爲'Employee',它不是'EntityDataBase'或者一個從該類派生的類型。在任何情況下,Rotem的建議都是正確的答案:在這裏你不需要泛型方法(並且你確實不需要反射),你只需要在基類中添加一個抽象方法,這樣每個子類就可以實現適當的'一些顯示機制'適合每個。 – 2014-11-02 17:36:07