2016-10-10 6 views
-1

私は2つのクラス、基本クラス、人を定義します。派生クラスの顧客。派生クラスの では、display()メソッドを書き換えます。 しかし、私は顧客のインスタンスで基本クラス(人)の表示メソッドを呼び出す必要があります。 どうすれば対応できますか?C#で派生クラスで既にオーバーライドされている基本クラスメソッドを呼び出す方法

私はmsdnで知っているbase()を使用して起動するいくつかの例がありますが、私の質問はクラス定義ではなく、インスタンスの呼び出しで呼び出されます。私はそれが違うと思う。

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

    //add your extra code here 
} 

あなたが実行しなくても、あなたの基本メソッドを実行する場合:あなたは基本メソッドをオーバーライドするとき

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

「上書き」ではなく「新」を使用しますか? – zerkms

+0

'DisplayInfo' –

+1

に' new'を使うのは避けてください。しかし、私はクラス定義では呼び出されませんが、インスタンス呼び出しでは--- "あなたはそれで解決している本当の問題は何ですか?それは最初のところでは悪い考えのように聞こえる。 – zerkms

答えて

0

通常あなたはまだ導出方法

のように基本メソッドを実行したいと思います派生したロジック あなたが必要とする基本メソッドを呼び出すだけで、派生クラスに別のメソッドを追加するのはかなり簡単です

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

オペレータが発信者側でそれを作ろうとしています – zerkms

1

あなただけのベース部材を非表示にするnewを使用しているので、あなたは基本メソッドを呼び出すために

(mycustomer as person).DisplayInfo(); 

を使用することができますが、私はこの良い習慣を考慮していません。

+0

誰でもダウンビートしました。このコードは新しいものでオーバーライドされていないので、 – Adrian

+0

@AlexeiLevenkovがそうしました – Adrian

0

あなたの親クラスはあなたの子クラスのインスタンスを保持できます。 あなたの例に基づいてこれを行う、それは動作します。

person mycustomer_in_person = new customer(); 
    mycustomer_in_person.DisplayInfo(); 
関連する問題