C#总结

第1章          深入,NET框架

(1).NET框架的过人之处

Ø  提供了一个面向对象的编程环境,完全支持面向对象编程。

Ø  对Web应用的强大支持。

Ø  对Web Service(Web服务)的支持。

Ø  实现SOA,支持云计算。

Ø  支持构建.NET程序的炫彩外衣。

 

(2).NET框架体系结构

.NET框架可以安装在Windows操作系统上,支持C#,VB,.NET,C++.NET等开发语言,也就是我们所说的跨语言开发。

,NET框架具有两个主要组件:CLR和FCL。CLR是.NET框架的基础。FCL是一个综合性的面向对象的可重用类型集合。

 

(3)CLR(公共语言运行时)

它是所有.NET应用程序运行时环境,是所有.NET应用程序都要使用的编程基础,它如同一个支持.NET应用程序运行和开发的虚拟机。

 

3.1   CTS

C#和VB.NET都是CLR的托管代码,它们的语法和数据类型各不相同,通用类型系统用于解决不同语言数据类型不同的问题。

 

3.2   CLS

编程语言的区别不仅在于类型,语法或者说语言规范也都有很大区别。因此.NET通过定义公共语言规范(CLS),限制了由这些不同点引发的互操作性问题。凡是遵循这个标准的语言在.NET框架下都可以实现相互调用。

 

(4),NET编译技术

为了实现跨语言开发和跨平台的战略目标,.NET所有编写的应用都不编译成本地代码,而是编译成微软中间代码。它将由JIT编译器转换成机器代码。例如,C#和VB,NET代码通过它们各自的编译器编译成MSIL。MSIL遵循通用的语法,CPU不需要了解它,再通过JIT编译器编译成相应平台专用代码,这里所说的平台是指我们的操作系统。这种编译方式,不仅实现了代码托管,而却能够提高程序的运行效率。

如果想要某种编程语言也支持,NET开发,需要有能够将这种语言开发的程序转换为MSIL的编译器。

 

(5)FCL(框架类库)

这些类库是我们进行软件开发的利器。

FCL的内容背组织成一个树状命名空间。每一个命名空间可以包含许多类型及其他命名空间。

,NET框架核心类库及其功能。

Ø  System:此命名空间包含所有其他的命名空间。

Ø  System.Collections.Generic:支持泛型操作。

Ø  System.IO:支持对文件的操作,如复制,粘帖,删除以及对文件的读写等。

Ø  System.Net:支持对网络协议的编程。

Ø  System.Data:提供对表示ADO.NET结构的类的访问。

Ø  System.Windows.Forms:用于开发Windows应用程序。

Ø  System.Drawing:支持GDI+基本图形操作。

 

第2章          深入C#数据类型

(1)值类型

源于System.ValueType家族,每个值类型都有一个独立的内存区域用于保存自己的值,值类型数据实在的内存区域称为栈。如intfloatdoule、枚举类型等。

对于值类型,不同的变量会分配不同的存储空间,并且存储空间中存储的是该变量的值。赋值操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值。

 

(2)引用类型

源于System.Object家族。在C#中引用类型主要包括数组、类和接口等。

对于引用类型,赋值是把原对象的引用传递给另一个引用。对数组而言,当一个数组引用赋值给另一个数组引用后,这两个引用指向同一个数组,也就是指向同一块存储空间。

 

(3)结构

结构的定义:

访问修饰符     struct       结构名

{

         //结构体

}

 

结构的使用:

结构的使用和类相似。在使用结构时,需注意:

Ø  可以不用new,直接定义结构的对象即可。

Ø  声明结构的对象后,必须给结构的成员赋初值。

 

结构的使用经验

结构是值类型,声明结构变量就存储一个结构的新副本,即系统要开辟一块新的存储空间,因此结构用得越多所消耗的存储空间也越多。

 

(4)装箱和拆箱

我们说数据类型按照存储方式可以分为值类型和引用类型,两者仍然可以相互转换。将值类型转换为引用类型的过程称为装箱,反之称为拆箱。

 

引用类型à值类型:拆箱

值类型à引用类型:装箱

 

在实际开发中,应该尽量减少不必要的装箱和拆箱,因为二者的存储方式不同,转换时性能损失较大。

 

(5)不同类型的参数传递

Ø  使用值传递,在方法中对参数值的更改在调用后不能保留。

Ø  使用ref方式传递,可以将对参数值的更改保留。

 

使用值方式(不用ref修饰)传递值类型参数时,参数在方法中的修改不会保留。

使用值方式(不用ref修饰)传递引用类型参数时,参数在方法中的修改会保留。

使用引用方式(用ref修饰)传递值类型或引用类型参数时,参数在方法中的修改都会保留。

 

 

 

 

第3章          使用集合组织相关数据

(1)集合概述

         数组的大小是固定的,可以建议一个类似于动态的“数组”,对其动态的进行增加,删除操作。

 

(2)ArrayList

ArrayList非常类似于数组,也有人称它为数组列表,ArrayList可以动态维护。

ArrayList的容量可以根据需要自动扩充,它的索引会根据程序的扩展而重新进行分配和调整。

ArrayList提供了一套列方法对其中的元素进行访问,增加和删除操作。

ArrayList类属于System.Collections命名空间,这个命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。。

ArrayList的常用方法及属性

属性名称

说明

Count

获取ArrayList中实际包含的元素数

返回值类型

方法名称

说明

int

Add(Object value)

将对象添加到ArrayList的结尾处

void

RemoveAt(int index)

移除ArrayList指定索引处的元素

void

Remove(Object value)

从ArrayList中移除特定对象

void

Clear()

从ArrayList中移除所有元素

 

(3)Hashtable

在ArrayList我们通常都是用索引访问它的元素,但用这种方式必须了解集合中某个数据的位置。当ArrayList中的元素变化频繁时,要跟踪某个元素的下标就比较困难了。

这时,可以给集合中的每个元素分别起个有意义的关键字,然后通过关键字来访问其中的元素。

C#提供了一种称为Hashtable的数据结构,通常称为哈希表,也有人称它为“字典”。

Hashtable也是属于System.Collection命名空间,它的每个元素都是一个键/值对。

Hashtable的常用方法及属性

属性名称

说明

Count

获取Hashtable中键/值对的数目

Keys

获取包含Hashtable中键的集合

Values

获取包含Hashtable中值的集合

返回值类型

方法名称

说明

void

Add(Object key,Object value)

将带有指定键和值的元素添加到Hashtable中

void

Remove(Object key)

从Hashtable中移除带有特定键的元素

void

Clear()

从Hashtable中移除所有元素

 

(4)泛型和泛型集合

泛型是C#2.0中的一个新特性。

泛型引入了一个概念:类型参数。

通过使用类型参数(T),减少了运行时强制转换或装箱操作的风险。

通过泛型可以最大限度的重用代码,保护类型的安全及提高性能。

它的最常见应用就是创建集合类,可以约束集合类中的元素类型。

 

(5)泛型集合List<T>

在System.Collections.Generic命名空间中定义了许多泛型集合类,这些类可以代替我们前面学习的ArrayList和Hashtable。

定义List<T>泛型集合:

语法:

       List<T> 对象名 = new List<T>();

 

注:“<T>”中的T可以对集合中的元素类型进行约束,T表明集合中管理的元素类型

List<T>添加一个元素的方法和ArrayList是一样的。

获取元素,删除元素,以及遍历一个List<T>的方法和ArrayList的用法都是类似的,但List<T>保障了类型安全性。

List<T>与ArrayList的区别

异同点

List<T>

ArrayList

不同点

对所保存元素做类型约束

可以增加任何类型

添加/读取值类型元素无需拆箱、装箱

添加/读取值类型元素需要拆箱、装箱

相同点

通过索引访问集合中的元素

添加元素方法相同

删除元素方法相同

 

(6)泛型集合Dictionary<K, V>

Dictionary<K,V>具有泛型的全部特性,编译时检查类型约束,获取元素时无须类型转换。

Dictionary<K,V>的存储方式和Hashtable类似,也是通过Key/Value(键/值)对元素进行保存的。

定义一个Dictionary<K,V>:

语法:

       Dictionary<K,V> 对象名 = new Dictionary<K,V>();

 

注:<K,V>中的K表示集合中Key的类型,V表示Value的类型。

Dictionary<K,V>和Hashtable的对比

异同点

Dictionary<K,V>

Hashtable

不同点

对所保存元素做类型约束

可以增加任何类型

添加/读取值类型元素无须拆箱、装箱

添加/读取值类型元素需要拆箱、装箱

相同点

通过Key获取Value

添加元素方法相同

删除元素方法相同

遍历方法相同

遍历Dictionary还可以采用下面的形式:

foreach(KeyValuePair<string,SE>    en     in      engineers)

{

         Console.WriteLine(en.Key);

         Console.WriteLine(en,Value.Name);

}

 

(7)泛型类

语法:

         public        class                   类名<T>

         {

                   //…….

}

注:T指类型参数,带包具体的数据类型,可以是类类型,也可以使基本数据类型。

对于一些常常处理不同类型数据转换的类,可以使用泛型定义。定义泛型类的过程,与定义一个类相似。不同之处在于,尖括号里定义了类型参数。

 

(8)泛型的优点

性能高。普通集合的数据,需要装箱和拆箱的操作,而泛型无须类型的转换操作。

类型安全。泛型集合对它所存储的对象

 

 

第4章          深入类的方法

(1)构造函数特点:

Ø  方法名与类名相同。

Ø  没有返回值类型。

Ø  主要完成对象的初始化工作。

 

(2)无参构造函数

缺点:对象实例化后的属性值是固定的。

 

(3)带参构造函数

语法:

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

         {

                   //…方法体

}

 

(4)隐式构造函数

C#有一个规定,一旦类有了构造函数,就不再自动分配构造函数。

 

(5)方法重载概述,特点

在同一个类中定义多个方法名相同、参数列表(参数个数,参数类型,参数顺序)不同的方法,称为方法重载。

特点:

Ø  方法名相同。

Ø  方法参数类型不同,或者参数个数不同,或者参数顺序不同。

Ø  在同一个类中

好处:

方法重载不仅能避免命名的麻烦,还能使调用者不必判断方法名就可直接调用。

 

(6)对象交互

在面向对象的程序中,方法名相同,而参数类型和参数个数不同。在同一个类中,构造函数和普通方法都可以重载。

 

第6章          初识继承和多态

(1)继承概述

被继承的类称为父类或基类,继承其他的类的类称为子类或者派生类。

继承要符合is a 的关系。

 

(2)base关键字和protected修饰符

protected:

被其修饰的类只能被其子类访问,不允许被其他非子类访问。

 

(3)子类构造函数

1、隐式调用父类构造函数

         默认可以调用父类无参构造函数。

         创建子类对象时会首先调用父类的构造函数,然后才会调用子类本身的构造函数。

 

2、显示调用父类构造函数

         是要在子类的构造函数后添加“:base(参数列表)”,就可以指定该子类的构造函数调用父类的哪个构造函数了。

 

(4)多态体现的方面

Ø  方法的参数。

Ø  数据的初始化。

Ø  返回值。

 

(5)继承的特性

1、继承的传递性。

2、继承的单根性。——C#不支持多继承。

 

(6)密封类sealed

用sealed修饰的类是不能被继承的,常见的string就是密封类。

 

(7)继承的价值

Ø  继承模拟了现实世界的关系。符合面向对象编程的思考方式。

Ø  继承实现了代码的重用。

Ø  继承使得程序结构清晰。

 

(8)多态的概念

多态的字面意思就是“多种形态”,指同已操作作用于不同的对象时,可以有不同的解释,产生不同的执行结果。

方法重载也称为方法的多态。

可以用虚方法实现多态。

 

第7章          深入理解多态

(1)里氏替换

原则上子类对象可以赋给父类对象,也可以说子类可以替换父类丙炔出现在父类能够出现的任何地方,且程序的行为不会发生变化。但是反过来,父类对象是不能替换子类对象的。这种特效被称为“里氏替换原则”。

 

(2)is和as操作符的使用

is操作符用于检查对象和指定的类型是否兼容。

as操作符主要用于两个对象之间的类型转换。

as和强制转换的区别就是,as转换失败的话会返回null,不会异常。

 

(3)抽象类和抽象方法abstract

抽象类不能被实例化。

抽象类不能是密封的或者静态的。

抽象类的方法不一定都是抽象方法,但是,含有抽象方法的类必然是抽象类。

 

抽象方法必须在其子类中实现,除非它的子类也是抽象类。

 

虚方法与抽象方法的区别

虚方法

抽象方法

用virtual修饰

用abstract修饰

要有方法体

不允许有方法体

可以被子类override

必须被子类override

除了密封类外都可以定义

只能在抽象类中定义

 

 

 

 

第8章          可扩展标记语言XML

(1)为什么学习xml

你的公司用Windows平台开发ASP.NET网站。当网站需要和另一个公司下Linux平台开发的JSP进行数据交互。

就是当实际工作中存在诸如此类跨平台、跨操作系统的数据交互问题。可以通过xml解决。

 

(2)什么是xml(Extensible Markup Language)?

xml称为可扩展标记性语言,是处理结构化文档信息的有力工具。

xml技术应用广泛,最基本的如网站、应用程序的配置信息一般都用xml文件描述。

Web服务使用xml定义应用程序之间传输数据的标准格式。

 

(3)xml语言的特点

Ø  xml中的每对标记通常被称为节点,它们必须成对出现。

Ø  xml中用于描述数据的各个节点可以自由扩展,也就是说xml用于描述信息的标记不是固定不变的。

Ø  xml文件中的节点区分大小写。

 

操作xml的方法

XmlDocument myXml=new XmlDocument();

myXml.Load("Engineer.xml”);

XmlNode engineer=myXml.DocumentElement;

foreach(XmlNode node in engineer.ChildNodes)

{

         switch(node.Name)

         {

                   case‘ID’:

                   ………………

}

}

注:XmlDocument对象表示整个XML文档,它使用Load()方法将指定的XML文件读入XmlDocument对象,Load()方法的参数是xml文档的路径。属性DocumentElement用于获取XML文件的根节点。

 

操作XML的对象属性和方法

对象

属性和方法

说明

XmlDocument

DocumentElement

获取根节点

ChildNode属性

获取所有子节点

Load()方法

读取整个XML的结构

XmlNode

InnerText属性

当前节点的值

Name属性

当前节点的名称

ChildNode属性

当前节点的所有子节点

 

 

 

 

 

 

 

第9章          文件操作

(1)读写一个文件的基本5个步骤

1、创建文件流

2、创建阅读器或着写入器

3、执行读写操作。

4、关闭阅读器或者写入器。

5、关闭文件流。

 

(2)文件流

流是一个用于数据传输的对象。

语法:

         FileStream文件流对象=new FileStream(string filePath,File fileMode);

其中,filePath是用于指定要操作的文件,而fileMode指定打开文件的模式。

 

(3)文件读写器

1、StreamWriter写入器。

主要方法:

         StreamWriter.Write();

         StreamWriteLine();

         StreamWriter.Close();

2、StreamReader读取器。

主要方法:

         StreamReader.ReaderLine();

         StreamReader.ReadToEnd();   //从当前位置读到末尾,返回字符串。

         StreamReader.Close();

 

(4)Encoding解决乱码的问题

不同文件的编码格式可能会有问题。

Encoding类指定字符编码。

 

 

(5)文件和目录操作

File类的常用方法

返回值类型

方法名称

说明

bool

Exists(string path)

用于检查指定文件是否存在

void

Copy(string oldPath,string newPath)

执行复制操作

void

Move(string oldPath,string newPath)

执行剪切操作

void

Delete(string path)

删除指定的文件

 

Directory类的常用方法

返回值类型

方法名称

说明

bool

Exists(string path)

用于检查指定文件是否存在

void

Move(string oldPath,string newPath)

执行剪切操作

void

Delete(string path,bool recursive)

删除指定目录,如果recursive值为true,则删除子目录中的所有内容。

 

(6)静态类和静态的方法

静态类与非静态类的区别

静态类

非静态类

用static修饰

不用static修饰

只包含静态成员

可以包含静态成员

不可以包含实例成员

可以包含示例成员

使用类名调用静态成员

使用实例对象调用非静态成员

不能被实例化

可以被实例化

不能包含示例构造函数

包含示例构造函数

 

(7)FileInfo类和Directory类

FileInfo类与File类功能类似,也可以完成对文件的基本操作。不同的是File类不可以实例化对象。如果打算多次重用某个文件对象,可以考虑使用FileInfo类。

Driectory和DriectoryInfo功能非常相似。如果打算多次重用某个目录对象,可以考虑使用DirectoryInfo类的示例方法。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值