我的c#app使用第三方库,它有多个不共享接口或基类的类,但有多个共同的属性(这些属性可能有也可能没有相同的名称,但它们基本上存储相同的属性信息)。只是为了给出一个简单的例子:
class A
{
int Prop1;
string Prop2;
}
class B
{
int Prop1;
string Prop2b;
}
注意Prop1如何为这两个类具有相同的名称,但Prop2和Prop2b具有不同的名称(尽管它们在语义上是相同的)。
在一个实例中,类实际上是结构。
这导致我身边有很多重复的代码对每个类做同样的事情(只是另一个简单的例子:将Prop1附加到Prop2或Prop2b)。处理这个问题的优雅方法是什么?
答案 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来动态创建实现。