gpt4 book ai didi

c# - 有没有办法指定范围?

转载 作者:太空狗 更新时间:2023-10-30 00:05:41 24 4
gpt4 key购买 nike

考虑这个代码示例:

public abstract class Parent
{
public int val;
public Parent()
{
val = 0;
}
public virtual void foo()
{
inc();
}

public virtual void inc()
{
val = val + 10;
}
}

public class Child : Parent
{
public override void foo()
{
base.foo();
}

public override void inc()
{
val++;
}
}

static void Main(string[] args)
{
Parent p = new Child();
Console.WriteLine("p.val = " + p.val); //Output: p.val = 0
p.foo();
Console.WriteLine("P.val = " + p.val); //Output: p.val = 1
}

我假设 Parent 类的 inc() 没有被调用,因为 {this} 指针实际上指向一个 Child 对象,所以 Child 版本的 inc() 将从 Parent 对象的函数 foo() 调用。有没有一种方法可以强制父函数 foo() 始终调用父函数 inc() 就像在 C++ 中使用 :: 运算符一样?

最佳答案

不,唯一可以非虚拟调用虚拟方法的方法是使用 base.Foo。当然,您可以在Parent 中编写一个非虚拟 方法,并让Parent.foo() 调用它,以及默认Parent.inc() 的实现。

关于c# - 有没有办法指定范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9394329/

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