簡體   English   中英

實例類型對派生類的方法調用的影響

[英]effect of instance type on Method invocation from derived class

假設我有以下內容:

static void Main(string[] args)
{
    DerivedClass input = new DerivedClass();
    input.WriteName(); // Outputs BaseClass
}

class BaseClass
{
    public void WriteName()
    {
        Console.WriteLine(GetName());//this.GetType()
    }

    protected string GetName()
    {
        return "BaseClass";
    }
}

class DerivedClass : BaseClass
{
    protected new string GetName()
    {
        return "DerivedClass";
    }
}

我對調用GetName()方法的對象類型進行了一些測試(使用GetType())(我的意思是DerivedClass.GetNameWriteName )。 我知道WriteNameDerivedClassDerivedClass不到新方法,而GetName方法被new關鍵字隱藏,但是實例類型( DerivedClass )對此沒有任何影響嗎? 調用GetName方法時,類型是否轉換為基類? 從主方法DerivedClass.GetName調用時,似乎提供了預期的結果。

該方法被派生類中的new關鍵字隱藏。 但這是從基類調用的,它將始終從基類調用實現。 甚至以下代碼也將打印“ BaseClass”:

public void WriteName()
{
        string className = "";
        if (this is DerivedClass)
        {
            className = ((DerivedClass)this).GetName();
        }
        else
        {
            className = this.GetName();
        }

        Console.WriteLine(className);
}

暫無
暫無

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

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