《CLR via C#》读书笔记 之 类型基础
2013-02-27 10:31
531 查看
第四章 类型基础
2013-02-274.2 类型转换
4.4 运行时相互关系
例1 展示了在调用方法时,线程栈是如何处理局部变量和参数的
托管堆的内存分配机制
例2 展示了在调用方法时,托管堆是如何工作的
JIT何时创建类型对象
创建对象
调用静态方法
调用非虚实例方法
调用的是虚实例方法
只有多态方法,没有多态实例字段
小结
参考
4.2 类型转换
返回CLR最重要的特性之一就是类型安全性。在运行时,CLR总能知道一个对象时什么类型。由于GetType是非虚方法,所以一个类型不可能伪装成另一个类型,通过这个方法,可以知道对象的确切类型。
CLR允许将一个对象转换为它的(实际)类型或它的任何基类型。
使用C#is和as操作符
is 检查一个对象是否兼容于(实际类型或基类型)指定类型,并返回一个布尔值。
as 检查一个对象是否能强制转换成指定类型,若不可以,返回null
4.4 运行时相互关系
返回本节将揭示类型、对象、线程栈和托管堆在运行时的相互关系。此外,还将解释调用静态方法、实例方法和虚方法的区别。
例1 展示了在调用方法时,线程栈是如何处理局部变量和参数的
返回图1展示了已加载了CLR的一个进程。在这个进程中,可能有多个线程。一个线程创建时,会分配到1MB大小的栈。这个栈空间用于向方法传递实参,也用于方法内部的局部变量。在图中,线程已执行了一些代码,准备调用M1方法。
static void Main(string[] args) { Base.StaticMethod(); //Base static method. Derived.StaticMethod(); //Base static method. Base b=new Base(); Derived d=new Derived(); Base c = new Derived(); b.NonStaticMethod(); //Base non static method. d.NonStaticMethod(); //Derived non static method. c.NonStaticMethod(); //Base non static method. b.VirtualMethod(); //Base virtual method. d.VirtualMethod(); //Derived virtual method. c.VirtualMethod(); //Derived virtual method. Console.WriteLine(b.name);//Base Console.WriteLine(d.name);//Derived Console.WriteLine(c.name);//Base Console.Read(); }
View Code
只有多态方法,没有多态实例字段【2】
从上述调用虚方法的得知,多态是如何实现的,即使变量e的类型是基类Employee,但只要它指向的对象是派生类Manager,且有覆盖虚方法的实例方法实现,就会调用Manager中的方法。但实例字段并不会覆盖,见如下代码:
class Employee { public string name = "Employee"; } class Manager : Employee { public string name = "Manger"; } class Program { static void Main(string[] args) { Employee e = new Manager(); Console.WriteLine(e.name); //显示:Employee } }
上述代码,Employee e = new Manager(); 具体过程参见创建引用类型的实例的过程
小结:
在使用变量调用方法或字段时,只有调用的是虚实例方法,是根据变量指向的对象,再找指向对象指向的类型对象中找相应的方法(多态方法是这样实现的);
调用非虚实例方法或字段时,是直接根据变量的对象类型,找相应的方法或字段。
参考
返回【1】 [你必须知道的.NET]第十九回:对象创建始末(下) /article/6958275.html
【2】 [你必须知道的.NET]第十五回:继承本质论 /article/6958298.html
相关文章推荐
- 《CLR via C#》读书笔记---06 类型和成员基础
- 《CLR via C#》读书笔记 之 类型和成员基础
- CLR Via C# 第四章 类型基础——读书笔记
- 《CLR via C#》读书笔记(6)类型和成员基础
- 《CLR via C#》读书笔记之:类型基础
- 《CLR via C#:框架设计》读书笔记 - 类型基础
- CLR via C# 3 读书笔记(11):第2章 生成、打包、部署和管理应用程序与类型 — 2.3 元数据简介
- 《CLR via C#》读书笔记(5)基元类型、引用类型和值类型
- CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段
- 《CLR Via C#》 学习心得之二 类型基础
- CLR via C# 读书笔记 可空值类型
- CLR Via C# 第五章(基元类型,引用类型与值类型)(1)——读书笔记
- 初读CLR Via C# 之类型基础(一)
- 《CLR via C#》Part2之Chapter4 类型基础(二)
- CLR via C# 读书笔记(九)静态类,类型对象的生存周期
- 《CLR via C#》笔记——类型基础
- read the "clr via C# " of 类型基础(第四章)
- 《CLR via C#》读书笔记 之 基元类型、引用类型和值类型
- 初读CLR Via C# 之类型基础(二)程序运行时的关系
- 带着问题读CLR via C#(二)类型基础