.Net框架程序设计-读书笔记(第四章 类型基础)

原创 2006年05月18日 17:04:00
1. 类型基础
1.1. 基类型System.Object
CLR要求所有的对象都要用new操作符来创建,new操作符所执行的工作:
 
1)       从托管堆中分配指定类型所需的内存空间;
2)       初始化对象的附加成员:类型方法表指针和SyncBlockIndex;
3)       传入new操作符中指定的参数,调用类型的实例构造器;
 
在new完成上述操作后,将返回一个指向新创建对象的引用。CLR中没有和new对应的delete操作符,分配的内存由垃圾回收器负责。
 
1.2. 类型转换
CLR在运行时总能知道一个对象的类型,也可以通过调用GetType方法来得到对象的准确类型。GetType方法为非虚方法,因此不可能利用它来篡改一个类型的信息。
 
CLR允许将对象转换为其原来的类型或者它的任何一个基类型。例如:C#不许要任何特殊的语法就可以将对象转换为任何一个基类型,转换为基类型被认为是安全的隐式操作。CLR会检查转型操作以确保总是将对象转型为它的实际类型,或者它的任何基类型。
 
1)       IS操作符检查对象是否和给定的类型兼容,并返回判断结果。IS操作符不会抛出异常。如果对象引用为NULL,那么IS操作符总是返回false;
2)       AS操作符检查引用对象是否和给定的类型兼容,如果兼容则返回一个同一对象的引用,否则返回NULL。AS操作符不会抛出异常;
 
If ( o is Employee )
    Employee e = (Employee)o;
 
上面的代码,CLR实际上对对象的类型检查了两次。Is操作符首先检查o所引用的对象是否和Employee兼容。如果兼容,if语句内在执行转换时CLR又会检查o是否为一个指向Employee的引用。为了提高性能C#提供了as操作符。
 
Employee e = o as Employee;
If ( e != null ) { … }
 
上面的代码中只检查了一次对象的类型,如果兼容as则返回一个指向同一对象的非空指针,否则返回null。检查e是否为null要比类型检查的效率高。
 
1.3. 命名空间与程序集
命名空间允许我们对相关类型进行逻辑上的组织。C#的using指示符会指示编译器试着在类型名上添加不同的前缀,直到找到一个匹配为止。
 
当查找一个类型的定义时,编译器必须被告知到哪些程序集中进行查找。编译器将扫描它知道的所有程序集来查找类型的定义。C#编译器默认情况下会自动在MSCorLib.dll程序集中进行查找。
 
C#还提供了另一种形式的using指示符允许我们为一个类型或者命名空间创建另外的别名。例如:
 
Using WintellectWidget = Wintellect.Widget;

         C#using指示符仅支持命名空间,没有提供任何指定程序集的方式。命名空间和程序集并非必然相关,多个属于同一命名空间中的类型可能被实现在多个程序集中,一个程序集也可以包含位于不同命名空间中的类型。

相关文章推荐

Microsoft .NET框架程序设计读书笔记(一)

1.什么是DLL hell?由什么引起的? DLL hell DLL灾难是由COM组件升级引起程序不能运行的情况。COM对象常常编译为dll文件。由于COM对象可以重用,这样多个程序可能使用同一...

学习《.net框架 程序设计》学习笔记---委托(一)

一.认识委托      在.net框架中,回调函数任然像在非托管windows编程中一样有用和普遍。但是,.net框架为回调函数提供了一种称为委托(delegate)的类型安全的机制。      例如...

《.NET框架程序设计(修订版)》--第三章 共享程序集 (1) 转载

学习笔记《.NET框架程序设计(修订版)》--第三章 共享程序集 (1)2004-12-27第二章里讲到对程序集的私有部署方式。这章里探讨创建可以被多个应用程序共同访问的程序集,即全局部署程序集(gl...

JavaScript高级程序设计读书笔记(第四章)(一)

变量
  • xqnode
  • xqnode
  • 2017年02月11日 16:56
  • 88

《Erlang程序设计中文版》-读书笔记

读>,只记录容易忘记或自己不懂的内容。 Chapter 2  变量可以16进制和32进制记号:16#cafe、32#sugar...

.NET框架程序设计——体系结构

谈到.NET,相信对于大多数初学者而言,都会感觉比较乱、比较迷茫,什么ASP.NET、VB.NET、VC.NET、ADO.NET、.NETFramework 等等概念,搞的我们晕头转向的,他们之间到底...

读书笔记:《C#与.NET4高级程序设计》-核心部分

虽然使用完全限定名定义一个类型可以提高程序的易读性,但C#的using关键字能够减少按键次数。一般选择C# using 关键字的简化方式,而不使用完全限定名(除非它们的定义含糊不清,可能发生歧义)。然...
  • Poerin
  • Poerin
  • 2012年09月11日 14:45
  • 271

(读书笔记).NET大局观-.NET框架类库概观

.NET框架类库概况   构建在.NET框架上所有的软件,都会用到通用语言进行时,即使基于最简单的CLR程序,也需要用到一部分.NET框架类库,更精致复杂的软件则使用这个类库提供的更多服务。   .N...

《JavaScript高级程序设计》读书笔记--5-引用类型

object类型创建objet实例有两种方式,new操作符后跟object构造函数和使用对象字面量表示法。//new var person = new Object(); person.name = ...

JavaScript高级程序设计读书笔记—— 基本数据类型

一、javaScript数据类型 5种基本数据类型 1. undefined 2. null 3. boolean 4. number 5. string 以及一种复杂数据类型  object ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.Net框架程序设计-读书笔记(第四章 类型基础)
举报原因:
原因补充:

(最多只允许输入30个字)