.net知识积累

1. .net技术可以以 规范和实现两部分来划分,.net Framwork.主要包括

公共语言运行时(Common language Runtime, CLR)

.net框架类库(Framework Class Library, FCL)

   而另外一部分规范称之为公共语言架构(common language Infrastructure, CLI)

通用类型系统CTS(common type system ,CTS)

公共语言规范(common language Specification , CLS)

通用中间语言(Common Intermediate Language ,CIL):

CIL是一种基于堆栈的语言,是任何.net语言编译产生的中间代码MSIL,可以理解IL就是CLR的汇编语言

执行IL时 JIT(just in time)即时编译器会将其需要执行的IL翻译成本机机器语言来执行

常见指令有: add, box unbox, newobjm call,initobj

CLR: .net框架核心,主要功能管理代码执行,提供CTS和基础性服务.

FCL: 提供了一整套标准类型,以命名空间组织成树状形式,树根是System.对程序设计人员来说,学习与熟悉FCL是突破设计水平的毕竟之路.

 

2.CLR支持两种基本类型值类型和引用类型

值类型值类型实例通常分配在线程的堆栈(stack),并且不包含任何指向实例数据

的指针,因为变量本身就包含了其实例数据.(msdn的定义:值类型直接包含他

们的数据). 值类型的实例要么在 堆栈上,要么内联在结构中.

值类型主要包括:

简单类型,结构体类型,枚举类型

引用类型(Reference Type):引用类型分配在托管堆上,变量保存了实例数据的内存地址

引用,(msdn定义:引用类型存储对值的内存地址的引用,位于堆上).

 

3.值类型与引用类型变量的内存分配:

值类型变量作为 局部变量时,该实例将被创建在栈上;

而如果值类型变量作为类型的成员变量时,它将作为类型实例数据的一部分,

同该类型的其他字段都保存在堆上

 

引用类型变量数据保存在堆上,根据实例大小有所区别,

实例大小<85000byte,则该实例创建在GC堆上

实例大小>85000byte,则该实例创建在LOH(Large Object Heap)堆上

4.String类型是特殊的引用类型

由于stringimmutable(不可变)特性,因此每次对string的改变都会在堆上产生

一个新的string变量, string作为参数传递时,在堆中会产生一个新的空间,并执行

数据拷贝,所以才有了类似于按值传递的结果

5..net中以操作符refout来标识值类型按引用类型方式传递.区别:

ref在参数传递之前必须初始化

out在传递前不必初始化,且在传递时必须显式赋值

 

--------------------------------------------------------

 

1.了解有关Type的重要事项如下:

1.对于程序中用到的每一个类型,CLR都会创建一个包含

   这个类型信息的Type类型的对象

2.程序中用到的每一个类型都会关联到独立的Type类的对象.

3.不管创建的类型有多少个实例,只有一个Type对象会关联到这些实例

2.获取Type对象的方法:

1.Object类型包含一个GetType()方法,返回对实例Type对象的引用.

   由于每一个类型最终都是从object继承的,所以可以在任何类型对象上

   使用GetType()来获取它的Type对象

   Type t=myInstance.GetType();

 

 2.还可以使用typeof运算符来获取Type对象

 3.通过Type对象可以获得 该类型中的所有信息.(字段,方法,属性),

 不包括值.因为所有的值都在对象里面

-------------什么是特性----------

3.特性:

是一种允许我们向程序的程序集增加元数据的语言结构.

它是用于保存程序结构信息的某种特殊类型的类

 

有关特性的要点:

在源代码中将特性应用于程序结构.

编译器获取源代码并且从特性产生元数据,然后把元数据放到程序集中

在结构前放置特性片段来应用特性

特性片段被方括号 [ ] 包围其中是特姓名 和 特性的参数列表

 

例如

[ Serilizable ]

public class MyClass{ ....}

 

[ MyAttribute( "Simple class"," Version 3.57 " ) ]

public class MyOtherClass{ ...}

 

1.大多数特性只针对直接跟随在一个或者多个特性片段后的结构

2.应用特性的结构 称作 被特性装饰(decorate)

 

-----------------------------------------------------

--泛型--

---------

1.泛型

提供了一种更准确的使用有一种以上的类型的代码方式

泛型就是类的一个参数(该参数必须是一个类型,不能是对象).

 

2.泛型允许声明类型参数化的代码,我们可以用不同的类型

进行实例化 (也就是说,我们可以用"类型占位符"来写代码,

然后创建类的实例时提供真实的类型).

 

3.C#中提供了5种泛型:

类 ,结构,接口,委托和方法前面4个是类型,而方法是成员

 

-----------

--泛型类--

-----------

1.泛型类不是实际的类,而是类的模板

   所以我们必须先从他们构建实际的类类型

   然后创建这个构建后的类类型的实例

 

2.泛型的使用:

 class Person<T1,T2>

 {

public T1 person1=new T1();

public T2 person2=new T2();

 }

 

posted @ 2012-07-04 20:18  zxp19880910  阅读(204)  评论(0编辑  收藏  举报