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

java程序设计基础_陈国君版第五版_第四章习题

java程序设计基础_陈国君版第五版_第四章习题 import java.util.Scanner; public class Main4_1 { public static void main...
  • gaoenbin626
  • gaoenbin626
  • 2016年03月08日 13:24
  • 3112

java语言程序设计基础篇第四章编程练习题

1 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner i...
  • gyhguoge01234
  • gyhguoge01234
  • 2016年07月03日 11:59
  • 1938

CSAPP第四章读书笔记

(1)将指令编码成为字节序列(1)将指令编码成为字节序列每一个不同类型的指令都有着不一样的起始字节,根据类型的不同编码的长度和格式也不一样。 注意立即数和地址在小端序列的存储中要倒着排序。(2)我们...
  • pp634077956
  • pp634077956
  • 2016年10月18日 10:10
  • 548

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

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

java程序设计基础_陈国君版第五版_第四章例题

java程序设计基础_陈国君版第五版_第四章例题 public class Main4_1 { public static void main(String[] args){ int a = ...
  • gaoenbin626
  • gaoenbin626
  • 2016年03月08日 13:19
  • 1045

java程序设计基础_陈国君版第五版_第六章习题

java程序设计基础_陈国君版第五版_第六章习题class Student{ int ID; String name; String sex; boolean leader; float g...
  • gaoenbin626
  • gaoenbin626
  • 2016年03月09日 10:27
  • 3064

java程序设计基础_陈国君版第五版_第五章习题

java程序设计基础_陈国君版第五版_第五章习题 import java.util.Scanner; public class Main5_1 { public static void main(...
  • gaoenbin626
  • gaoenbin626
  • 2016年03月08日 18:54
  • 7743

vb.Net程序设计(一)——其实不太懂

背景:     前天vb.Net视频就已经看完了,可是总是懒懒的,不想去总结。其实原因不只是自己懒,还有就是自己看完视频后感觉没有学到什么东西,看完后最强烈的感觉就是台湾的时间比大陆的时间走得慢,一集...
  • u013043341
  • u013043341
  • 2015年02月11日 16:41
  • 1286

.Net基础体系和跨框架开发普及

.net体系经过十几年发展,发生了很多变化。特别是在最近两年,随着开源和跨平台的发展,衍生出很多概念,像标准库,可移植库,.Net Core等,相信有不少同学对他们之间的关系是有一些困惑的,这里我从基...
  • oyuk06cm
  • oyuk06cm
  • 2017年02月11日 18:55
  • 774

深入.net第四章

三层体系结构的概念 用户界面表示层(USL) 业务逻辑层(BLL) 数据访问层(DAL) BLL将USL与DAL隔开了,并且加入了业务规则 各层的作用 1:数据数据访问层:主要是对原始数据(数...
  • weixin_36024609
  • weixin_36024609
  • 2017年03月23日 19:02
  • 237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.Net框架程序设计-读书笔记(第四章 类型基础)
举报原因:
原因补充:

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