gpt4 book ai didi

C# - 我什么时候需要覆盖?我什么时候不需要它?

转载 作者:太空狗 更新时间:2023-10-30 01:19:00 25 4
gpt4 key购买 nike

我正在使用 C# 和 Unity3d。

当我使用 Monobehaviour 并创建一个 Update 方法时,我不需要使用 override 关键字。

当我创建自己的类并重写一个函数时,我确实需要使用 override 关键字。

这是为什么呢?为什么在创建 Update 方法时不需要 override 关键字?

最佳答案

我认为您的困惑来自于 Unity 对这些方法(UpdateStartAwake 等)做了一些特殊的事情。您可以将它们声明为私有(private),即使这样它们也会被调用。除非您使用反射,否则使用该语言无法实现,但有人告诉我他们不使用它,所以我不知道他们做了什么。老实说,没关系。因为你可以认为这是语言的一个异常(exception),也就是说,如果你实现它们,这些方法就会被调用。就是这样。

对于所有其他内容,您必须遵循语言。这是一个粗略的解释:

如果一个方法在基类中被标记为抽象虚拟,您可以或必须覆盖

当基类希望其子类实现它时,方法是抽象的。当基类提供方法的实现但也为子类提供实现/修改该方法的机会时,该方法是虚拟的

那么为什么不能所有的方法都是“可重写的”呢?保护基类开发者的意图。您将更改基类的行为,您不知道基类开发人员是否希望您这样做。这就像一个安全锁。所以这就是为什么要使用 abstractvirtualoverride 这三个词来将 API 意图从基类传达给它们的子类。

关于C# - 我什么时候需要覆盖?我什么时候不需要它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24772681/

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