2016-10-10 148 views
-1

我定义了两个类,基类person。和派生类客户。 在派生类中,我重新编写了display()方法。 但我想在客户实例中调用基类(person)的显示方法。 我该如何处理?在C#中如何调用派生类实例中已在派生类中重写的基类方法

我知道在msdn中,有一些使用base()来调用的例子,但我的问题是不在类定义中调用,而是在实例调用中调用。我认为这是不同的。

using System; 
using System.Text; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     person myperson = new person(); 
     myperson.DisplayInfo(); 

     customer mycustomer = new customer(); 
     mycustomer.DisplayInfo(); 

     // --here I want to invoke person.display(). how to realize it? 
     //mycustomer.base.DisplayInfo(); 
    } 

    public class person 
    { 
     public string Name="base name"; 
     public virtual string DisplayInfo() 
     { 
      string msg = Name; 
      Console.WriteLine(msg); 
      return msg; 
     } 
    } 

    public class customer : person 
    { 
     public new void DisplayInfo() 
     { 
      Console.WriteLine("derive "+ Name); 
     } 
    } 
} 
+2

你确定要'new'而不是'override'吗? – zerkms

+0

避免为'DisplayInfo'使用'new'' –

+1

“但我的问题不是在类定义中调用,而是在实例调用中”---你用它解决的真正问题是什么?这听起来像是一个糟糕的主意。 – zerkms

回答

0

通常当你重写基方法,你仍然要在你的派生方法

像运行基本方法:

public override void DisplayInfo() 
{ 
    //call base method 
    base.DisplayInfo(); 

    //add your extra code here 
} 

,如果你想不运行运行的基础方法导出的逻辑 向您的派生类添加另一种方法以调用所需的基本方法将非常容易

public void RunBaseDisplayInfo() 
{ 
    base.DisplayInfo(); 
} 
+0

OP想要在来电方 – zerkms

1

因为你只是用new隐藏基成员,您可以使用

(mycustomer as person).DisplayInfo(); 

调用基方法,但我不认为这是很好的做法。

+0

谁downvoted,这项工程,因为代码使用新的而不是覆盖 – Adrian

+0

@AlexeiLevenkov这样做 – Adrian

0

您的父类可以容纳您的子类的实例。 根据你的例子做到这一点,它的工作原理。

person mycustomer_in_person = new customer(); 
    mycustomer_in_person.DisplayInfo(); 
相关问题