c# -什么时候需要重写?当我不需要它的时候

本文关键字:不需要 什么时候 重写 | 更新日期: 2023-09-27 18:13:12

我使用c#和Unity3d。

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

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

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

c# -什么时候需要重写?当我不需要它的时候

我认为你的困惑来自于Unity对这些方法(Update, Start, Awake等)做了一些特别的事情。你可以将它们声明为私有的,即使这样它们也会被调用。除非使用反射,否则使用这种语言是无法实现的,但我被告知他们不使用它,所以我不知道他们是怎么做的。老实说,这并不重要。因为你可以认为这是语言的一个异常,也就是说,如果你实现了这些方法,这些方法就会被调用。简单。

对于其他的,你必须遵循语言。下面是一个粗略的解释:

如果一个方法在基类中被标记为abstractvirtual,你可以或必须对它进行override

一个方法是abstract当基类希望它的子类实现它。当基类提供了一个方法的实现,同时也为子类提供了实现/修改该方法的机会时,该方法就是virtual

那么为什么不能所有的方法都是"可重写的"呢?保护基类开发者的意图。你会改变基类的行为,你不知道基类开发者是否希望你这样做。就像一把安全锁。这就是为什么你有三个词abstract, virtualoverride,将API的意图从基类传达给它们的子类。

您需要使用override,当您从另一个类派生一个类并且您需要更改virtual基类的方法的代码时。这样,基类的继承方法可以有不同的行为——更适合于——派生类。

更一般地说,如MSDN中所述:

重写修饰符需要扩展或修改继承方法、属性、索引器或事件的抽象或虚拟实现。