在同一个类中可以重写函数吗?

Moh*_*der 5 c# oop overriding

这是一个客观问题类型,但是在同一个类中可以重写函数吗?一般来说,准确地说是在 C# 中。如果可以的话,如何以及何时使用?

Bil*_*hir 1

这来自 C# 语言规范\xc2\xa710.6.4 覆盖方法

\n\n
\n

被重写声明重写的方法称为\n 重写的基方法。对于在类 C 中声明的重写方法 M,重写的基方法是通过检查 C 的每个基类类型来确定的,从 C 的直接基类类型开始,然后继续检查每个连续的直接基类类型,直到在给定的基类类型中找到至少一个可访问方法,该方法在替换类型参数后具有与 M 相同的签名。为了定位重写的基方法,如果方法是公共的、受保护的、受保护的内部方法或者是内部的且在同一个程序中声明,则该方法被视为可访问如 C.

\n\n

除非对于覆盖声明满足以下所有条件,否则会发生编译时错误:

\n\n
    \n
  • 可以如上所述定位被重写的基本方法。

  • \n
  • 确实存在一种这样的重写基本方法。仅当基类类型是构造类型时,此限制才有效,其中类型参数的替换使两个方法的签名相同。

  • \n
  • 重写的基方法是虚拟的、抽象的或重写的方法。换句话说,重写的基方法不能是静态的或非虚拟的。

  • \n
  • 重写的基方法不是密封方法。

  • \n
  • 重写方法和被重写的基方法具有相同的返回类型。

  • \n
  • 重写声明和重写的基方法具有相同的声明可访问性。换句话说,重写声明不能更改虚拟方法的可访问性。但是,如果重写的基方法是内部受保护的,并且在与包含重写方法的程序集不同的程序集中声明它,则必须保护声明的重写方法\xe2\x80\x99 的可访问性。

  • \n
  • 覆盖声明不指定类型参数约束子句。相反,约束是从重写的基本方法继承的。请注意,重写方法中作为类型参数的约束可能会被继承约束中的类型参数替换。这可能会导致显式指定时不合法的约束,例如值类型或密封类型。

  • \n
\n
\n\n

所以不,这是不可能的, override 修饰符用于扩展基类方法,而不是用于隐藏当前类中的方法定义。

\n\n

也许你的面试官可能会在方法被覆盖后对方法选择感到困惑,例如这里

\n