C# 在同一类中是否可以重写函数?
这是一种客观问题类型,但在同一类中是否可以重写函数?一般来说,准确地说,是C。如果可能的话,如何以及何时使用它?刚刚测试过。 类本身不会给编译器显示错误甚至警告的理由,但当调用函数时,编译器会显示: 以下方法或属性之间的调用不明确: “方法1”和“方法2”C# 在同一类中是否可以重写函数?,c#,oop,overriding,C#,Oop,Overriding,这是一种客观问题类型,但在同一类中是否可以重写函数?一般来说,准确地说,是C。如果可能的话,如何以及何时使用它?刚刚测试过。 类本身不会给编译器显示错误甚至警告的理由,但当调用函数时,编译器会显示: 以下方法或属性之间的调用不明确: “方法1”和“方法2” 从语法上讲,使用标准方法是不可能的。但实际上,您可以通过更改委托(更接近于自己的方法)来实现这一点。但这离通过对象、助手(通过接口联系人提供服务)改变行为已经不远了,后者更灵活 class Test1 { public virtual
从语法上讲,使用标准方法是不可能的。但实际上,您可以通过更改委托(更接近于自己的方法)来实现这一点。但这离通过对象、助手(通过接口联系人提供服务)改变行为已经不远了,后者更灵活
class Test1
{
public virtual void Test2() {
}
public override void Test2() {
}
}
给你一个编译错误。所以,不,这是不可能的。这是来自C语言规范
被重写声明重写的方法称为
重写的基方法。对于类中声明的重写方法M
C、 重写的基方法是通过检查每个基来确定的
类类型C,从直接基类类型C开始,然后
继续使用每个连续的直接基类类型,直到
给定基类类型,至少有一个可访问的方法位于
替换类型参数后具有与M相同的签名。对于
为了定位被重写的基本方法,方法是
如果是公共的,如果是受保护的,如果是
受保护的内部,或者如果它是内部的并且在同一个
程序名为C
编译时错误会发生,除非以下所有条件对于
覆盖声明:
- 可以如上所述定位重写的基本方法
- 只有一个这样被重写的基方法。此限制仅在基类类型为构造类型且 类型参数的替换使两个方法的签名成为 一样
- 重写的基方法是虚拟、抽象或重写方法。换句话说,重写的基方法不能是静态的或静态的 非虚拟的
- 重写的基方法不是密封方法
- 重写方法和重写的基方法具有相同的返回类型
- 重写声明和重写的基方法具有相同的已声明可访问性。换句话说,重写声明 无法更改虚拟方法的可访问性。然而,如果 重写的基方法受内部保护,并在 与包含替代方法的程序集不同的程序集 然后必须保护重写方法声明的可访问性
- 重写声明未指定类型参数约束子句。相反,约束条件是 从重写的基方法继承。请注意,约束 重写方法中的类型参数是否可以替换为类型 继承约束中的参数。这可能导致约束 显式指定时不合法的,例如值类型或 密封类型
例如,在方法被替代后,面试官可能会对方法选择感到困惑。你不能。根据定义(从):需要重写修饰符来扩展或修改继承的方法、属性、索引器或事件的抽象或虚拟实现 不能继承类本身()的属性,因此不能在同一个类中重写 有一件事接近重写,您可以做的就是方法重载
public class A
{
void methodA()
{
//something here
}
void methodA(int i)
{
//something else here
}
}
看起来它无法被覆盖。然而,我确实看到了它的用处。例如,如果要手动重写机器生成的代码。为什么首先要这样做?重写同一类中的方法与更改方法是一样的。我认为没有办法,也不需要这样做,但是,如果要将方法签名与实现分离,有部分的方法,但我不建议使用这个,除非它是绝对必要的。很可能是重载而不是重写。您/他们是指从基类重写还是重载同一类中的方法?