作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用第 3 方库中的 2 个类,我们称它们为 Obj1 和 Obj2。它们具有几乎相同的设置属性和方法,除了一些。两者都是独立的对象,不继承任何共同的对象。
问题是在我的代码中,我必须为这两个对象设置 2 条路径,即使我对它们所做的工作是相同的。示例:
void Foo1(Obj1 obj) {
obj.Cost = calcCostObj1(obj);
obj.Rate = generateRateObj1(obj);
... // 50 more lines of this
}
void Foo2(Obj2 obj) {
obj.Cost = calcCostObj2(obj);
obj.Rate = generateRateObj2(obj);
...
}
当然,我可以重载这些方法,但它仍然是几乎每个操作的 2 个方法...
不幸的是,我无法修改第 3 方库。在 C# 中是否有一种方法(我知道这不太可能),我可以通过某种方式将这 2 个类统一到一个接口(interface)中,这样我就不必使用 2 个方法来处理所有事情。
或者至少概括一下情况。
附言我的梦想场景(目前无法使用 C#):
void Foo<T>(T obj) where T: Obj1, Obj2 {
obj.Cost = calcCostObj<T>(obj);
obj.Rate = calcRateObj<T>(obj);
}
// calling code
Obj1 obj = new Obj1();
Foo<Obj1>(obj);
最佳答案
您可以创建一个接口(interface),以及通过将调用转发到 Obj1 和 Obj2 来实现它的两个代理类。
interface IObj {
int calcCostObj1();
...
}
class Obj1Wrapper: IObj {
Obj1 obj;
int calcCostObj1() {
return obj1.calcCostObj1();
}
}
如果你使用Resharper,你可以通过“委派成员”重构生成那些代理类
关于c# - 如何将 2 个对象统一为一个连贯的外观?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28976294/
我是一名优秀的程序员,十分优秀!