gpt4 book ai didi

c# - 如何将 2 个对象统一为一个连贯的外观?

转载 作者:行者123 更新时间:2023-11-30 19:57:43 25 4
gpt4 key购买 nike

我正在使用第 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com