簡體   English   中英

在C#中如何從派生類實例調用已經在派生類中覆蓋的基類方法

[英]in C# how to invoke base class method, which already override in derived class, from derived class instance

我定義了兩個類,基類,人。 和派生類客戶。 在派生類中,我重寫了 display() 方法。 但是我想在客戶實例中調用基類(人)的顯示方法。 我該如何處理?

我知道在 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);
        }
    }
}

由於您只是使用new來隱藏基本成員,因此您可以使用

(mycustomer as person).DisplayInfo();

調用基本方法,但我不認為這是一個好習慣。

通常,當您覆蓋基本方法時,您仍然希望在派生方法中運行基本方法

喜歡:

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

     //add your extra code here
}

如果您想在不運行派生邏輯的情況下運行您的基本方法,則可以很容易地將另一個方法添加到您的派生類中,只需調用您需要的基本方法

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

您的父類可以保存子類的實例。 根據您的示例執行此操作,它可以工作。

    person mycustomer_in_person = new customer();
    mycustomer_in_person.DisplayInfo();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM