gpt4 book ai didi

c# - 有没有办法调用重写方法的父版本? (C#.NET)

转载 作者:IT王子 更新时间:2023-10-29 04:00:41 25 4
gpt4 key购买 nike

在下面的代码中,我尝试了两种方法来访问 methodTwo 的父版本,但结果始终是 2。有没有什么方法可以在不修改这两个类的情况下从 ChildClass 实例中获取结果 1?

class ParentClass
{
public int methodOne()
{
return methodTwo();
}

virtual public int methodTwo()
{
return 1;
}
}

class ChildClass : ParentClass
{
override public int methodTwo()
{
return 2;
}
}

class Program
{
static void Main(string[] args)
{
var a = new ChildClass();
Console.WriteLine("a.methodOne(): " + a.methodOne());
Console.WriteLine("a.methodTwo(): " + a.methodTwo());
Console.WriteLine("((ParentClass)a).methodTwo(): "
+ ((ParentClass)a).methodTwo());
Console.ReadLine();
}
}

更新 ChrisW 发布了这个:

From outside the class, I don't know any easy way; but, perhaps, I don't know what happens if you try reflection: use the Type.GetMethod method to find the MethodInfo associated with the method in the ParentClass, and then call MethodInfo.Invoke

该答案已被删除。我想知道这个 hack 是否可行,只是出于好奇。

最佳答案

ChildClass.methodTwo() 内部,您可以调用 base.methodTwo()

在类之外,调用 ((ParentClass)a).methodTwo() 调用 ChildClass.methodTwo。这就是虚拟方法存在的全部原因。

关于c# - 有没有办法调用重写方法的父版本? (C#.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/438939/

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