2014-02-14 24 views
1

我的c#應用程序使用第三方庫,其中有多個類不共享接口或基類,但有多個共同屬性(屬性可能不一致具有相同的名稱,但它們基本上存儲相同的信息)。只給一個簡單的例子:優雅地處理第三方庫中具有相同屬性的不同類

class A 
{ 
    int Prop1; 
    string Prop2; 
} 

class B 
{ 
    int Prop1; 
    string Prop2b; 
} 

注PROP1如何有兩個類相同的名稱,但PROP2和Prop2b有不同的名稱(儘管它們在語義上是相同的)。

在一個實例中,類實際上是結構。

這會導致我的一邊有很多重複的代碼來爲每個類做同樣的事情(只是另一個簡單的例子:將Prop1附加到Prop2或Prop2b)。什麼是處理這個問題的優雅方法?

+0

你可以嘗試'dynamic',但是你的問題還不夠清楚。 – MarcinJuraszek

+0

他們是部分類嗎? – Shoe

+0

@Marcin:有趣的想法,但不會工作,因爲屬性名稱有時會略有不同(Prop2 vs Prop2b)。 – Jimmy

回答

1

你可以寫那些從接口派生適配器,例如

第三方類

class Car 
{ 
    int CarId; 
    string CarName; 
} 

class Motorcycle 
{ 
    int MotoId; 
    string MotoName; 
} 

你的界面

public interface IVehicle 
{ 
    int Id; 
    string Name; 
} 

而且你的類

class MyCar : IVehicle 
{ 
    private Car _car; 
    public MyCar (Car car){ _car = car } 
    int Id; // returns _car.CarId 
    string Name; // returns _car.CarName 
} 

class MyMotorcycle : IVehicle 
{ 
    private Motorcycle _moto; 
    public MyCar (Motorcycle moto){ _moto = moto; } 
    int Id; // returns _moto.MotoId 
    string Name; // returns _moto.MotoName 
} 

現在你可以使用接口。

1

您可以創建一個接口,然後爲每種類型創建一個適配器以使其適應該接口。如果有足夠的類來保證額外的複雜性,則可以使用Castle.DynamicProxy來即時創建實現。

相關問題