gpt4 book ai didi

c# - 接口(interface)继承 - 好事?

转载 作者:行者123 更新时间:2023-11-30 19:51:36 28 4
gpt4 key购买 nike

我刚刚第一次使用它 - 考虑一下:

IGameObject
void Update()

IDrawableGameObject : IGameObject
void Draw()

我有一个使用 DrawableGameObjects 的关卡类 - 我将其切换为 IDrawableGameObject 以减少耦合并有助于 TDD。

然而,我当然失去了不强制转换就调用 Update(..) 的能力——为了解决这个问题,我使用了继承。我以前从未使用过基于接口(interface)的继承 - 除了这种情况,我也没有真正发现需要。

我真的不想每次都在我的更新方法中进行转换,因为它每秒被调用多达 60 次,另一方面,使用 IGameObject 的 foreach(..) 可能会起作用。

有什么建议吗?

编辑

我应该补充 - 我后来为单元测试创​​建的假的,然后实现 IDrawableGameObject - 这些类现在有很多方法,而不是每个接口(interface)只有少数几个。我知道接口(interface)必须只有少数成员大,但是继承是否打破了这个规则?

谢谢

最佳答案

I know interfaces must be only a handful of members large

它们需要包含表达概念所需的成员数量——不多也不少。 BCL 中有一些非常可怕的接口(interface)(尽管您可能会争辩说有些接口(interface)太大了)。

我想说这绝对是接口(interface)继承的可接受用法。

顺便说一句...如果有只依赖于接口(interface)成员的实现逻辑,请考虑使用扩展方法,这样实现类就不需要重复...例如:

// just a silly example that only uses members of the target type
public static void DrawComplete(this IDrawableGameObject obj, Canvas canvas) {
obj.Draw(canvas);
foreach(var child in obj.Children.OfType<IDrawableGameObject>()) {
child.DrawComplete(canvas);
}
}

然后所有调用者都获得 DrawComplete 方法,所有实现都无需重复它。

关于c# - 接口(interface)继承 - 好事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/879584/

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