1.深入.NET框架
.NET框架的魅力
提供了一个面向对象的的编程环境,完全支持面向对象编程。.NET框架提高了软件的可复用性、可扩展性、可维护性和灵活性,这些特点需要我们在今后的学习中慢慢体会。
对Web的应用的强大支持。如今是互联网的时代,大量的网络应用程序发挥着重要的作用。例如,世界上较大的个人计算机供应商戴尔公司(DELL),它的销售手段是网络订购方式,它的官方网站就是由.NET开发的。面对如此庞大的用户群体的访问,它仍旧能够保证高效率的工作,这与.NET平台的强大功能与稳定性是分不开的。
.NET框架体系结构
了解了.NET框架的魅力之后,下面来介绍.NET框架的组成及工作原理
.NET框架运行在操作形态之上,是.NET最基础的框架。它提供了创建、部署和运行.NET应用的环境,主要包含公共语言进行时(CLR)和框架类库(.NET Framework类库,FCL),并且支持多种开发语言,也就是我们所说的跨语言开发。
.NET框架具有两个主要组件:CLR和FCL。CLR是.NET框架的基础,FCL是一个综合性的面向对象的可重用类型集合,利用它不仅可以开发传统命令行应用程序,而且可以开发WInForms应用程序及基于ASP.NET的应用程序。
1.WPF
WPF是微软Vista操作系统的核心开发库之一,它不仅是一个图形引擎,而且给Windows应用程序的开发带来了一次革命。对于普通用户而言,最直观的感受是界面越来越漂亮,用户体验更加友好;而对于开发人员而言,界面显示和程序代码将更好的得到分离,这与以前的桌面应用开发有很多不同。一个开发出来的WPF程序不仅可以被发行到桌面,而且可以被发行到Web及智能设备上。Vista操作系统界面及Silverlight都是通过WPF来实现的。
2.CLR
CLR的全称为公共语言运行时。它是所有.NET应用程序运行时环境,是所有.NET应用程序都要使用的编程基础,它如同一个支持.NET应用程序运行和开发的虚拟机。开发和运行一个.NET应用程序必须安装.NET Framework。CLR也可以看成一个在执行时管理代码的代理,管理代码都是CLR的基本功能,能够被其管理的代码称为托管代码,反之称为非托管代码。CLR包含两个组成部分:CLS(公共语言规范)和CTS(通用类型系统)
3.CTS
C#和VB.NET都是CLR的托管代码,它们的语法和数据类型各不相同,CLR时如何对这两种不同的语言进行托管的呢?通用类型系统(Common Type System,CTS)用于解决不同语言数据类型不同的问题。
4.CLS
编程语言的区别不仅在于类型,语法或者说语言规范也都有很大的区别。因此.NET通过定义公共语言规范,限制了由这些不同点引发的互操作性的问题。CLS是一种最低的语言规范,它制定了一个以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。凡是遵守这个标准的语言在.NET框架下都可以实现互相调用。
5.FCL
.NET框架另外一个重要部分是FCL,即框架类库。FCL提供了对系统功能的调用,是建立.NET应用程序、组件和控件的基础。通过灵活运用这些类库。我们的开发工作将会更加便利。
类和对象
由对象归纳为类,是归纳对象共性的过程。
在类的基础上,将状态和行为实体化为对象的过程称为实例化
对于类的属性,我们通过get和set访问器进行访问和设置,用来保障类中数据的安全。属性访问器分为以下三种:
只写属性:只包含set访问器。
只读属性:只包含get访问器。
读写属性:同时包含set访问器和get访问器。
封装
封装又称为信息隐藏,是指利用抽象数据类型将数据和数据的操作结合在一起,使其构成一个不可分割的独立实体,尽可能隐藏北部的细节,只保留一些对外接口,使之与外部发生联系。封装主要给我们带来的好处
保证数据的安全性
提供清晰的对外接口
类内部实现可以任意修改,不影响其他类
2.深入C#数据类型
值类型和引用类型
值类型
每个值类型都有一个独立的内存区域用于保存自己的值,值类型数据所在的内存区域称为栈。只要在代码中修改它,就会在它的内存区域被保存这个值。
引用类型
在C#中引用类型主要包括数组、类和接口等。
结构
结构语法:
访问修饰符 struct 结构名
{
//结构体
}
结构的定义有以下特点:
结构中可以有字段,也可以有方法。
定义时,结构中的字段不能被赋初值。
结构的使用
结构的构成和类相似。在使用结构时,要注意以下几个方面
可以不用new,直接定义结构的对象即可。
声明结构的对象后,必须给结构的成员赋初值。
3.使用集合组织相关数据
集合概述
ArrayList非常类似数组,也有人称它为数组列表,ArrayList可以动态维护。我们知道,数组的容量是固定的,而ArrayList的容量可以根据需要自动扩充,它的索引会根据程序的扩展而重新进行分配和调整。ArrayList提供了一系列方法对其中的元素进行访问、增加和删除操作。
ArrayList通过Add()方法添加数据
ArrayList通过RemoveAt()方法删除指定下标的值
ArrayList通过Remove()方法删除指定索引的值
Hashtable
C#提供了一个称为Hashtable的数据结构,通常称为哈希表,也有人称它为“字典”。使用字典这个名称,是因为其数据构成非常类似于生活中的字典。在一本字典中,我们常常通过一个单词查找关于这个单词的更多信息。Hashtable的数据是通过键和值来组织的。
泛型
泛型是C#2.0中的一个新特性。泛型引入了一个概念:类型参数。通过使用类型参数(T),减少了运行时强制转换或装箱操作的风险,通过泛型可以最大限度地重用代码,保护类型的安全及提高性能,它的最常见应用就是创建集合类,可以约束集合类中的元素类型。
泛型集合List
语法:
List<T> 对象名 = new List<T>();
T可以对集合中的元素类型进行约束,T表明集合中管理的元素类型。
泛型集合Dictionary<K,V>
在C#中还有一种泛型集合Dictionary<K,V>。它具有泛型的全部特性,编译时检查类型约束,获取元素时无须类型转换,并且它存储数据的方式和Hashtable类似,也是通过Key/Value(键/值)对元素保存的
语法如下
Dictionary<K,V> 对象名 = new Dictionary<K,V>();
泛型类
在集合中使用泛型只是泛型多种应用的一种,在类、方法等方面也有着泛型的广泛应用,使用泛型类,可以封装不是特定于具体数据类型的操作。
对于一些常常处理不同类型数据转换的类,可以使用泛型定义。定义泛型类的过程,与定义一个类相似。语法如下:
public class 类名<T>
{
}
T指类型参数,代表具体的数据类型。可以是类类型,也可以时基本数据类型。
4.深入类的方法
构造函数
类的构造函数时类中的一种特殊方法,它具有以下特点。
方法名与类名相同
没有返回值类型
主要完成对象的初始化工作
无参构造函数
在默认情况下,系统将会给类分配一个无参构造函数,并且没有方法体,我们也可以自定义一个无参构造函数,在无参构造函数的方法体种对类的属性进行赋值。无参构造函数的语法如下:
访问修饰符 类名(){}
带参构造函数
语法如下
访问修饰符 类名(参数列表){}
参数列表一般用来给类的属性赋值
隐式构造函数
当你手动添加了一个无参构造函数时,系统会默认给你添加一个隐式的参数,如果你手动添加了参数,那么不会有隐式的参数。
构造函数的重载
在面向对象的语言中,允许我们在同一个类中定义多个方法名相同,参数列表(参数个数、参数类型)不同的方法,称为方法重载。调用时会根据实际传入参数的形式,选择与其匹配的方法执行。构造函数的重载是方法重载的一种特殊方式。
方法重载的特点:
方法名相同
方法参数类型不同或者参数个数不同
个隐式的参数,如果你手动添加了参数,那么不会有隐式的参数。
构造函数的重载
在面向对象的语言中,允许我们在同一个类中定义多个方法名相同,参数列表(参数个数、参数类型)不同的方法,称为方法重载。调用时会根据实际传入参数的形式,选择与其匹配的方法执行。构造函数的重载是方法重载的一种特殊方式。
方法重载的特点:
方法名相同
方法参数类型不同或者参数个数不同
在同一个类中