![](/img/trans.png)
[英]What's the difference between a Real Literal and Type Casting in C#?
[英]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.