优雅地处理第三方库中具有相同属性的不同类

时间:2014-02-14 01:37:05

标签: c#

我的c#app使用第三方库,它有多个不共享接口或基类的类,但有多个共同的属性(这些属性可能有也可能没有相同的名称,但它们基本上存储相同的属性信息)。只是为了给出一个简单的例子:

class A
{
   int Prop1;
   string Prop2;
}

class B
{
   int Prop1;
   string Prop2b;
}

注意Prop1如何为这两个类具有相同的名称,但Prop2和Prop2b具有不同的名称(尽管它们在语义上是相同的)。

在一个实例中,类实际上是结构。

这导致我身边有很多重复的代码对每个类做同样的事情(只是另一个简单的例子:将Prop1附加到Prop2或Prop2b)。处理这个问题的优雅方法是什么?

2 个答案:

答案 0 :(得分: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 :(得分:1)

您可以创建一个接口,然后为每种类型创建一个适配器,以使其适应该接口。如果有足够的类来保证额外的复杂性,您可以使用Castle.DynamicProxy来动态创建实现。