簡體   English   中英

類型轉換和多態 function 調用之間的區別?

[英]The difference between type casting and a polymorphic function call?

我正在閱讀 Rihter 關於 c# 的書,我想知道類型轉換是如何工作的。

說我有這段代碼:

    class Parent
    {
        public virtual void DoStuff()
        {
            //... some code
        }
    }

    class Child : Parent
    {
        public override void DoStuff()
        {
            // .. some different code
        }
    }

現在在 Main() function 我稱之為:

        Parent child = new Child();
        child.DoStuff();

這與類型轉換有何不同? 根據 Rihter 的說法,CLR 將在 memory 中跟蹤子對象到子對象類型對象 (Child) 的鏈接,並檢索指向該方法的 Child.DoStuff() 版本的指針。 對我來說,這聽起來像是與此相同的操作:

        ((Child)child).DoStuff();

我哪里錯了?

這與類型轉換有何不同?

多態性與類型轉換有很大不同,它是 OO 編程語言的關鍵基礎。 您的示例並沒有真正展示該功能的實用性。

考慮以下示例:

 abstract class Animal {
     public abstract string MakeSound(); }

 void PrintSound(Animal animal) { Console.WriteLine(animal?.MakeSound(); }

現在調用點的典型場景只有在運行時才知道參數:

var animal = makeUserChooseAnimal(); //no idea what animal this will be
PrintSound(animal);

您究竟適合您所詢問的演員陣容中的哪個位置? 但是多態性和虛擬調用將使之成為可能,無論真正將什么動物傳遞給PrintSound ,都會調用適當的MakeSound()

現在,如果您感興趣的是了解 CLR 如何確定要調用的方法,那么我建議您閱讀 Eric Lippert 關於該主題的三部分系列,從這里開始。

暫無
暫無

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

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