[英]Access Parent Class virtual method from inheriting Child Class Object
我想知道是否可以使用继承类(覆盖方法)对象来访问基本虚方法。
我知道这不是一个好习惯,但我想知道的原因是技术上是否可行。 我不遵循这样的做法,只是出于好奇而提出要求。
我确实看到了一些类似的问题,但我没有得到我正在寻找的答案。
例:
public class Parent
{
public virtual void Print()
{
Console.WriteLine("Print in Parent");
}
}
public class Child : Parent
{
public override void Print()
{
Console.WriteLine("Print in Child");
}
}
class Program
{
static void Main(string[] args)
{
Child c = new Child();
//or Parent child = new Child();
child.Print(); //Calls Child class method
((Parent)c).Print(); //Want Parent class method call
}
}
请解释downvotes。 stackoverflow上任何现有类似问题(具有令人满意的答案)的链接都是可接受的答案。 谢谢。
根据我评论的链接副本,您可以使用一些反射技巧来做到这一点:
static void Main(string[] args)
{
Child child = new Child();
Action parentPrint = (Action)Activator.CreateInstance(typeof(Action), child, typeof(Parent).GetMethod("Print").MethodHandle.GetFunctionPointer());
parentPrint.Invoke();
}
不 - 不可能调用Base类的Virtual方法 - 在这种情况下调用该方法的派生程序最多。 在您给出的示例中,它将在两种情况下打印"Print in Child"
打印"Print in Child"
。
据我所知,你能做的最好的事情是:
public class Parent
{
public virtual void Print()
{
Console.WriteLine("Print in Parent");
}
}
public class Child : Parent
{
public override void Print()
{
base.Print();
Console.WriteLine("Print in Child");
}
}
class Program
{
static void Main(string[] args)
{
Child c = new Child();
//or Parent child = new Child();
child.Print(); //Calls Child class method
((Parent)c).Print(); //Want Parent class method call
}
}
我不知道什么时候会有所帮助。 但是一个体面的解决方法可能是重载或写一个只调用父类的虚方法。 它看起来像这样:
public class Child : Parent
{
public void Print(bool onlyCallFather)
{
if(onlyCallFather)
base.Print();
else
Print();
}
}
然后在你的主要方法中:
class Program
{
static void Main(string[] args)
{
Child c = new Child();
child.Print(false); //Calls Child class method
child.Print(true); //Calls only the one at father
}
}
所以它会做你想做的事。 我实际上已经看到了这种类型的解决方法,以告诉您是否要调用基本方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.