我需要一個小模式的方向。新的C#。我不能控制的兩個第三方類的通用接口。外部多態性?
我正在使用包裝Web服務的第三方開發工具包。我處理的有兩個特定類,雖然比較相似,但在devkit中有兩個不同的名稱空間,沒有共同的基類。但是我希望程序針對它們的通用界面。我隨意地把一個實現包裝在包裝中的實現扔到了一起,但我確信它不是最有效的方法,因爲不斷的類型轉換。
我一直在挖掘關於適配器,接口,擴展方法等的文章。但是我的運行時間很短,所以如果我能夠在一個方向推動,將不勝感激。
using ThirdParty.TypeA.Employee;
using ThirdParty.TypeB.Employee;
public class Employee
{
private object genericEmployee;
private EmployeeType empType;
public enum EmployeeType
{
TypeA = 0;
TypeB = 1;
}
public Employee(Object employee, EmployeeType type)
{
genericEmployee = employee;
empType = type;
}
public String Name
{
if (empType == EmployeeType.TypeA)
return (ThirdParty.TypeA.Employee)genericEmployee.Name;
else
return (ThirdParty.TypeB.Employee)genericEmployee.Name;
}
public String Age
{
if (empType == EmployeeType.TypeA)
return (ThirdParty.TypeA.Employee)genericEmployee.Age;
else
return (ThirdParty.TypeB.Employee)genericEmployee.Age;
}
}
版本2:
class EmployeeTypeAAdapter : TypeA, IEmployeeAdapter
{
TypeA _employee;
public EmployeeTypeAAdapter(TypeA employee)
{
_employee = employee
}
public String Name
{
get { return _employee.Name; }
set { _employee.Name = value; }
}
public String Balance
{
get
{
if (_employee.Balance != null)
{
decimal c = _employee.Balance.Amount;
return String.Format("{0:C}", c);
}
else
{
return "";
}
}
}
//...
}
class EmployeeTypeBAdapter : TypeB, IEmployeeAdapter
{
TypeB _employee;
public EmployeeTypeAAdapter(TypeB employee)
{
_employee = employee
}
public String Name
{
get { return _employee.Name; }
set { _employee.Name = value; }
}
public String Balance
{
get
{
if (_employee.Balance != null)
{
decimal c = _employee.Balance.Amount;
return String.Format("{0:C}", c);
}
else
{
return "";
}
}
}
//....
}
TypeA和TypeB是公共的還是衆所周知的,我的意思是你真的需要引入enum嗎?你可以採用通用的方式。 – abatishchev
TypeA和TypeB的類型是什麼,這些類是如何聲明的?同樣的屬性集合,沒有基類?所以你可以通過'object'來概括它們? – abatishchev
第三方庫中沒有基類。枚舉只是我創建的一個便利屬性,用於避免每次訪問屬性時都不得不使用TypeOf或IS來確定對象的類型(TypeA或TypeB)。 – RyanMac