1.深入.NET框架

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.深入类的方法

构造函数

类的构造函数时类中的一种特殊方法,它具有以下特点。
方法名与类名相同
没有返回值类型
主要完成对象的初始化工作

无参构造函数

在默认情况下,系统将会给类分配一个无参构造函数,并且没有方法体,我们也可以自定义一个无参构造函数,在无参构造函数的方法体种对类的属性进行赋值。无参构造函数的语法如下:

访问修饰符 类名(){}

带参构造函数
语法如下

访问修饰符 类名(参数列表){}

参数列表一般用来给类的属性赋值

隐式构造函数

当你手动添加了一个无参构造函数时,系统会默认给你添加一个隐式的参数,如果你手动添加了参数,那么不会有隐式的参数。

构造函数的重载

在面向对象的语言中,允许我们在同一个类中定义多个方法名相同,参数列表(参数个数、参数类型)不同的方法,称为方法重载。调用时会根据实际传入参数的形式,选择与其匹配的方法执行。构造函数的重载是方法重载的一种特殊方式。
方法重载的特点:
方法名相同
方法参数类型不同或者参数个数不同
隐式的参数,如果你手动添加了参数,那么不会有隐式的参数。

5.初始继承和多态

继承

两个都有相同的特征和行为。就是一种继承关系

base关键字和protected修饰符

C#中有一个关键字base,他表示父类,可以用于访问父类的成员。

C#中有三个访问修饰符,public公开的,private私有的,protected受保护的。如果属性设置为public公开的,那么任何类都可以让问该属性。

字类构造函数

字类构造函数存在于字类当中,而构成字类的必须存在一个相应的父类,其字类构造函数的调用与必须再父类中存在,否则就会报错,未找到该构造函数,字类构造函数能够给父类的构造函数赋值,使其能够会获得我们想要的得到的效果

显示调用父类构造函数

C#可以用base关键字调用父类的构造函数。只要在字类的构造函数后添加":base(参数列表)",就可以指定该字类的构造函数调用父类的哪一个构造函数了。这样便可以实现继承属性的初始化,然后在子类的构造函数中完成对字类特有属性的初始化即可。

继承的使用

继承的单根性

就比如一个人有多个身份。

C#中规定,一个字类不能有同时继承多个父类。

C#中还有一个特殊的关键字sealed,用它修饰的类是不能被继承的,我们称这种类为密封类。常用的string类就是密封类。

is a 的应用

这个关键字用来判断对象是否属于给定的类型。

继承的价值

继承模拟了现实世界的关系,OOP中强调一切皆对象,这符合我们面向对象编程的思考方向。

继承实现了代码的重用,合理地使用继承,会使代码更加简洁。

继承使得程序结构清晰,子类和父类地层次结构清晰,最终的目的是使字类只关注字类的相关行为和状态,无须关注父类的行为和状态。

总结

继承必须符合is a 的关系,被继承的类称为父类或者基类,继承其他类的类称为子类或者派生类

继承机制很好的解决了代码复用的问题

子类继承父类的成员,并且可以拥有自己特有的成员。

被protected访问修饰符修饰的成员允许被其字类访问,而不允许其他非子类访问。

base关键字可以用于调用父类的属性、方法和构造函数

继承具有传递性,如果classA:B,class B:C,A也可以访问C的成员

C#中的继承具有单根性,一个类不能够同时继承自多个父类。

在字类中,如果不使用base关键字来显示调用父类构造函数,将隐式调用父类默认的构造函数。

如果重载的构造函数有一个没有使用base关键字来指明调用父类的哪一个构造函数,父类必须提供一个默认的构造函数。

多态按字面的意思就是"多种形态",指同一操作作用与不同的对象时,可以有不同的解释,产出不同的执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值