![](/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.