[英]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.