|
|
1
6
如果并且仅当实现IwidGet1的类型 必须 同时实现ICommon。在这两种情况下,类都将分别实现IwidGet1和ICommon。唯一的区别是,如果您使iWidget1从icommon“派生”,则强制执行iWidget1也必须是icommon这一事实。 一个很好的例子是IEnumerable和ICollection。每个ICollection都保证是IEnumerable,因此ICollection派生自IEnumerable。如果集合合法或有意义但不可枚举,那么ICollection的实现者也不必实现IEnumerable。 无论您选择哪个,都不会影响COM可见性。如果调用正确,.NET仍将单独导出接口。 |
|
|
2
3
用李斯科夫替代原理来帮助自己找到答案。 如果可以用iWidget1替换所有使用icommon1的客户端,则可以从icommon1继承iWidget1。 如果不是,则使用实现多个接口的类。 |
|
|
3
1
还有一个我认为在其他答案中没有考虑到的因素。 如果您从ICommon派生Iwidgetx,然后想出一个同时具有Iwidget1和Iwidget2行为的小部件,您可以执行多个接口实现:
如果这两个接口都是从ICommon派生的,那么您的类中将有两个ICommon实现。这不是大问题,可以由 multiple interface implementation 但是它改变了逻辑。 另一方面,如果您不从ICommon派生Iwidgetx,那么您只需实现这三个,而不必处理显式实现:
因此,如果可以想象您可能需要这样的widget3类,那么最好不要从icommon派生iwidgetx接口。 |
|
|
4
0
继承性依赖于类或接口的属性/行为。如果行为
|
|
|
A B · C#Excel自动调整列避免长文本时出错 9 月前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 10 月前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 10 月前 |
|
|
Duck0 · 这个对象在更高的帧率下会更快吗,因为它在Update()中? 10 月前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 10 月前 |