![]() |
1
11
如果新方法可以用旧方法表示,则可以使用扩展方法:
如果方法不能这样表达(即它们确实需要由组件本身实现),那么我建议定义一个新的接口。这种方法具有最大的向后兼容性。 |
![]() |
2
4
如果您的IServerComponent接口尚未发布,或者是一个仅由您自己的类实现的内部接口,并且新的接口成员对于实现该接口的所有现有类都是有意义的,请更改现有接口。 否则,创建扩展IServerComponent的IServerComponent2接口。IIRC这是框架设计指南推荐的。可以在.NET框架中找到一个这样的示例,其形式为 X509Certificate2 班级。 但是,如果新成员可以根据原始成员实现,则也可以使用 extension methods :
|
![]() |
3
1
我知道你的例子是人为的,但是我想给你一个与你所表达的不同的人为的答案,这样你就可以用不同的方式来思考它。不是让你的接口方法在具体的东西上操作,而是在抽象的东西上工作。 例如
如果这确实是一个加法,那么我认为这更有意义,但是如果它更像calculate(),那么您将希望将一些或所有方法操作向下移动到IAddableThings对象。
|
![]() |
4
0
它取决于上下文——如果有许多类实现了原始接口,或者如果发布了它,那么唯一可行的方法就是引入新的接口。另一方面,从长远来看,只有一个接口要干净得多,所以如果您能负担得起的话,我建议您重构现有的接口。 |
![]() |
5
0
如果您不需要或不想更改已经实现旧接口的类(现在或将来),您应该只创建第二个接口。然而,它感觉更像是一个黑客,可能会给您提供不太直观的代码。 另外,根据我的经验,推迟重构从来不是一个好主意。因此,如果您怀疑稍后需要实现接口,那么您也可以修改现有的接口,让自己省去一些麻烦。这无疑是更清洁的方法。 |
![]() |
6
0
我认为维护单个接口更容易,但是第二种方法使用2个接口更好,因为不是每个类都需要实现
|
|
Deconimus · C++模板方法重载和多态性类访问 7 年前 |
![]() |
Vincent · 一种类型特征,标识哪个类提供重载解析选择的函数 7 年前 |
![]() |
Lingxi · C中的默认参数vs重载++ 7 年前 |
![]() |
Slime recipe · 多目标框架导致CS1503 7 年前 |
![]() |
Dick Lucas Carl · 函数重载的替代方法 7 年前 |
![]() |
Ali · Typescript rest参数具有两种可能的数组类型 7 年前 |