深入c#编程

深入.NET

第一章:深入.NET框架

1.1:MIcorsoft.NET框架概述

特点:

.Net框架是开发.NET的程序核心基础,提供了一个面向对象的编程环境,完全支持面向对象编程,提高了软件的复用性和扩展性,可维护性,灵活

1.2:.NET框架体系结构

1.2.1:.NET框架的主要组件

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

1.2.2:CLR介绍

CLR称为公共语言运行时,他是所有.NET运行的环境,是所有应用程序的编程基础,CLR包括两个组成部分:ClS(公共语言规范)和CTS(通用类型系统)

 

  1. .NET编译技术

为了实现夸语言开发和跨平台开发目标,.NET所有编写的应用都不变异成本的代码,而是编译成微软中间代码,将JIT编译器转换成机器代码,然后再编译成MSIl,,再通过JIT编译器编译成相应的平台专用代码。

  1. CTS

C#和VB都是CLR的托管代码,他们的语法和数据类型都不同CTS(通用类型系统)解决不同的语言数据类型的不同问题。

  1. CLS

编程语言的区别不仅在于类型,语法或者语言规范也有很多不同,因此.NET通过定义公共语言规范,限制不同点引发的操作性问题。

 

1.2.3:FCL

.NET另外一个重要的组成部分是FCL,就是框架类库

1.3:面向对象回顾

1.3.1:类和对象

概念:类是对象的模型,对象是类的实例

 

属性:我么通过GET,Set访问器来进行设置,保障类的数据安全(快捷键:prop+两次tab)

 

  set:只写属性:只包含Set访问器

  get:只读属性:只包含get访问器

  get,set:读写属性:同时包含两个访问器

1.3.2:封装

优点:

保障数据的安全

提供清晰的对外接口

类内部实现可以任意修改,不影响其他类

1.3.3:类图

可以将类属性和方法以图的形式展现出来,使阅读者能够清晰的了解类之间的关系

第二章:深入C#数据类型

2.1:值类型和引用类型

2.1.1:概述

数据类型

常用的数据类型

java

C#

整形

int

int

浮点型

float

float

双精度型

double

double

字符串

String

string

布尔类型

boolean

bool

枚举类型

enum

enum

 

1:值类型

值类型都有一个独立的区域用于保存自己的值,值类型索在的内存区是栈(struck)只要在代码中修改就会在内存区域白菜这也值,值类型一般是基本数据类型和枚举类型

2:引用数据类型

一般包括数组,类(对象)和接口,(涉及到new对象了,基本都是引用数据类型)存在于堆中

类别

描述

值类型

基本数据类型

int

Long

float

double

char

Bool

枚举类型

Enum

结构类型

Struct

引用类型

基类System.Object(对象)

string

class

接口

Interface

数组

Int[]   string[]  

 

2.1.1:结构

定义语法:访问修饰符 struct  结构名

{

         //结构体

}

1结构的特点:

  结构中可以有字段,也可以有方法

  定义结构时,结构的字段不能被复初始值

2:结构的使用:

  可以不用new对象,直接使用定义的对象就可以了;

  声明结构对象时后,必须给结构成员复值才能使用

2.1.4:装箱和拆箱

装箱;把值类型转化成引用类型

 

拆箱:把引用类型转化成值类型

2.2:不同类型的参数传递

2.2.2:值方式参数传递

在值方式(没有ref修饰)参数传递时,参数可以是引用类型(会绝对的改变原版),也可以是值类型(只能改变副本,不能改变原版),

2.2.3:引用方式参数传递

在引用方式(ref修饰)参数传递时,参数可以是引用类型(会绝对的改变原版),也可以是

值类型(会绝对的改变原版),也就是说有ref修饰的传递时,无论什么类型都可以绝对的修改

 

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

3.1:集合概述

集合:相当于一个可以动态维护的数组   存在于System.Collections命名空间下

3.1.1:ArrayList

属性名称

说明

Count

获取集合中的元素个数(相

当于数组的length)

返回值类型

方法名称

说明

Int

Add(object value)

将对象添加到集合中

Void

RemoveAt(int index)

移除集合中指定下表的元素

Void

Remove(object Value)

从集合中移除指定的元素/对象

Void

Clrar()

清除集合所有元素

 

  例子(初始化器):ArrayList en=new ArrayList(){

New SE(){Name=”李四”Age=23,ID=”1001”},

New SE(){Name=”wangwu”Age=23,ID=”1002”},

New SE(){Name=”李四”Age=23,ID=”1003”}

};

  ArrayList  list=new  ArrayList();

 

SE se=new SE();

se.Name=”王超”;

se.Id=”1003”;

se.Age=22;

 

list..Add(se);  //添加元素

 

 

3.1.2:HashTable

属性名称

说明

Count

获取集合中的元素个数(相当于数组的length)

 

Keys(key)

获取包含在集合中的keys值的集合(key获得单个元素)

Values(value)

获取包含在集合中的元素/值的集合(value获取单个元素)

返回值类型

方法名称

说明

Int

Add(object Ksy,object value)

将对象(指定的key值和元素value)添加到集合中

Void

Remove(object key)

从集合中移除指定的元素/对象

Void

Clrar()

清除集合所有元素

 

  例子(初始化器):HashTable en=new HashTable (){

New SE(){Name=”李四”,Age=23,ID=”1001”},

New SE(){Name=”wangwu”,Age=23,ID=”1002”},

New SE(){Name=”李四”,Age=23,ID=”1003”}

};

  HashTable list=new  HashTable ();

 

SE se=new SE();

se.Name=”王超”;

se.Id=”1003”;

se.Age=22;

 

list..Add(se);  //添加元素

 

list[“key值”]     返回单个元素

 

 

foreach( object ob in list.Keys){

console.write((string)ob)   //获得元素key值

}

 

foreach( object ob in list.values){

console.write((SE)ob)   //获得元素key值

}

 

3.2:泛型和泛型集合

特点:可以约束元素的类型,,保障数据的安全性,常用的有:list<T> dictionary< k,V>

 

List<> 对象名=new List<>();    添加元素的时候会严格控制类型(因为声明的时候在尖括号指明类型)   其他用法和Arraylist一样

 

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

 

Dictionary<string,SE> 对象名=new   Dictionary<string,SE>();

 

遍历:

Foreach(KeyValuePair<string,SE> en in list){

List.Key;   //获取key值

List.value;  //获取Vaulue元素值

}

3.2.4:泛型类

对于一些常常处理不同的数据类型的时候,使用泛型类,大大提高了代码的复用性。

 

语法:

Public class类名<T>{

//

}

T:指的是类型参数,可以是自定义类型,也可以是基本类型

第四章:深入类的方法

4.1:构造函数

1:构造函数特点

  方法名与类名一样

  没有返回值类型

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

注意:如果自定义了构造函数,系统不会默认的提供隐形的构造函数了,需要自己手动添加一个无参的构造函数,来方便其他类实例化对象(如果没有那个无惨构造函数,就不能实例化)

 

无参构造方法:语法

Public 类名()

{

         //方法体

}

带参构造方法:语法

Public 类名(类型   变量)

{

         //方法体

}

4.2:方法的重载

4.2.1:方法函数的重载

特点:

  方法名相同

  方法的参数类型或列表不同

  在同一个类中

4.3:对象的交互

在面向对象的世界里,万物皆对象,对象是相互独立的,互不干涉,但是在一定的外力作用下对象可以实现交互。

每个类都有自己的特征和行为,我们把他们封装成属性和方法,对象之间通过属性和方法进行交流,可以认为方法的参数为对象之间交互传递消息

第六章:初识继承和多态

6.1:继承概述

6.1.1:什么是继承

1:继承就是继承父类所拥有的属性和方法,(拥有父类的特性)

 

语法:访问修饰符   class   类名:父类名

{

         //

}

6.1.2:base关键词和producted关键词

Base:通过base.属性或方法是访问父类的属性或者方法

Producted:受保护的,只有其之类或者本类可以访问此关键词修饰的语句

修饰符

类的内部

子类

其他类

Public

可以

可以

可以

Producted

可以

可以

不行

Private

可以

不行

不行

Internal

可以

不可以

可以

 

6.1.3:子类构造函数

1:隐式调用父类的构造函数

在创建子类对象的时候,会默认的先调用父类的无参构造函数,在调用本类的构造函数。如果是没有无惨构造函数,就要指定一个带参构造函数,如果自己写了构造函数,就不会提供默认的无参构造函数。

 

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

可以用base关键词显示的调用父类的构造函数。只要在之类的构造函数添加 :base(参数

列表),就可以指定该子类的的构造函数调用父类的那一个构造函数。这样便可以实现继承属性初始化。然后在子类本身的构造函数中完成对子类特有的属性的初始化即可。

6.2:继承的应用

6.2.1:继承的特性

1:继承的传递性

子类    可以继承  父类  的特性,子类   的  子类  可以继承  子类   的特性

2:继承的单根性

子类不能继承多个父类,(不能实现多继承)

6.2.2:is  a的 应用

就是   x   is  a  y:就是指:x属于y的类型。就可以转换为y类,实现强制转换

6.3:多态

虚方法实现多态:父类定义一个虚方法,子类重写父类的方法。,然后执行的时候会执行子类的重写方法。就可以实现多态。

 

语法:

父类:  public  virtual  返回值类型    方法名()

{

         //方法名要一样,不同的子父类中

}

 

子类:  public    override   返回值类型    方法名()

{

         ////方法名要一样,不同的子父类中

 

        

}

第七章:深入理解多态

7.1:里氏替换和多态

7.1.1:里氏替换的概述

1:就是子类替换父类可以出现在任何位置。但是父类不能替换子类。(子类可以替换父类,单父类不能替换子类),就是可以先申明一个父类,然后new  一个子类对象

 

2:is  和as  操作符的使用

If(X  is  y){

       X  as  y

}

 

就是如果x是y类型,就把x转换为y类型 

 

7.1.2:父类类型作为参数

里氏替换原则指子类对象可以替换父类对象。那么开发程序可以编写一父类作为形参数,然后实际传入子类对象。从而实现多态。

 

 

7.2:抽象类和抽象方法

7.2.1:为什么使用抽象类和抽象方法

语法:访问修饰符  abstract   返回值类型  方法名();   //抽象方法没有逻辑代码块

 

语法:  访问修饰符   abstrauct   class  类名{

         //

}

 

  抽象类不能实例化。

  抽象类中不一定都是抽象方法。但是抽象类也可以容纳具体的实例方法。但是:抽象方法的类必须是抽象类。

7.2.2:抽象类和抽象方法的应用

1:如何实现抽象方法

档重一个子类派生一个父类,子类将继承父类的所有特征。包括它为实现的抽象方法。抽象方法必须在其子类实现。除非它的子类也是抽象类。与子类重写父类虚方法。在子类也使用override关键词来重写抽象方法。

第八章:可扩展标记语言XML

8.1:XML概述

8.1.1:为什么学习XML

解决跨平台,夸操作系统的数据交互问题。

8.1.2:什么是XML

XML称为可扩展标记语言。可以实现不同的系统之间的数据交互。

 

  XML中的每队标记通常被称为节点、必须成对出现。用来描述这个节点的内容。在节点中存储该节点的信息

   

  XML中用于描述数据各个节点可以自由扩展,不是固定的节点,可以自定义。

 

  XML文件中的节点是区分大小写的。

 

8.2:操作XML的方法

8.2.1:解析XML文件

XMLDocment  myXml= new  XmlDocment();

 

myXml.Load(“文件名路径”);

 

XmlLNode  engineer=myXml.DocuMentEleMent;    //上面几步可以读取到XMl的根节点

 

Foreach(XmlNode node  in   engineer.ChildNodes)

{

         //node.InnerText;   //获取到节点的内容

         //node.name;        //获取到节点的节点名

对象

属性和方法

说明

XmlDocument

DocumentElement属性

获取节点名

ChildNodes

获取所有子节点

Load()

读取整个XMl文件

XmlNode

InnerText

当前节点的值

Name属性

当前节点的名称

ChiidNodes

当前节点的所有子节点

 

}

 

8.3:用TreeView显示数据

8.3.2:动态绑定TreeView数据

  给TreeView添加节点用Add()方法

TreeNode  Root=new TreeNode(“string类型的参数”);

This.tvMenu.Add(Root);

 

  Add()方法的参数可以是文本   ,  返回值是当前节点对象

TvMenu.Node.add(“string类型参数”);

 

  给选择的节点添加子节点

  This.tvMenu.seleedNode.Nodes.Add(“新闻频道”);

属性

说明

Nodes

TreeView中的所有数节点

selectedNode

选择的节点

事件

说明

AfterSelect

选择节点发生的事件

属性

说明

Text

节点的文本

Index

节点所有集合索引

Level

节点的深度

Tag

节点的隐藏值

Nodes

节点的所有下一集节点

 

 

 

2:TreeView动态删除节点

  删除选择节点

This.TvMenu.selectedNode.Remove();

 

  清空选择的节点的子节点

This.TVMenu.SelectedNode.Nodes.Clear();

 

  清空所有的子节点

This.tvMenu.nodes.Clear();

 

第九章:文件操作

9.1:文件概述

用来保存临时的较少的数据的。

9.2:如何读取文件

(导入命名空间:using  System  IO;)

步骤:

 创建文件流

 创建读取器或者写入器

 执行读/写操作

 关闭读取器或者写入器

 关闭文件流

语法:

  FileSrtream mySf=  new  FIleStream(path,FileMode.Create);    ///path:路径参数  ,FileMode:枚举类型

 

  StreamWriter  mySw= new StreamWriter(mySf,Enconding.UTF-8); 或者 读取

StreamReader  mySr= new StreamReader  (mySf,Enconding.UTF-8);

 

  MySw/mySr.write/Reader(“写入的内容参数”/读取的内容参数);

 

  mySw/mySr.close();

 

  mySf.close();

 

StreamReader读取器:

StreamReader主要用于读取流中的数据

StreamReader.ReadLine();  读取一行数据  ,返回字符串

StreamReader.ReadTOEnd(); 从当前位置读取到结束的位置

StreamReader.Close();    关闭读取器

9.3:文件和目录操作

9.3.1:File类和Directory类

File(文件类)类的常用方法

返回值类型

方法名称

说明

Bool

Exists(stirng path)

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

Void

Copy(string  sourcepath,nowPath)

将指定路径的文件复制到其他路径去

Void

Move(string  sourcepath,nowPath)

将指定文件移动到新路径

Void

Delete(string path)

删除指定的文件

 

Directory目录类

返回值类型

方法名称

说明

Bool

Exists(string path)

检查是否存在此目录(文件夹)

Void

Move(string  sourcepath,nowPath)

将指定目录移动到新路径

Void

Delete(string path)

删除指定的目录

 

静态类与非静态类的区别

静态类

非静态类

Static修饰

不能Static修饰

只包含静态成员

刻意包含静态成员

不能包含实例成员

可以包含实例成员

使用类名调用静态属性

使用实例对象调用非静态的属性

不能被实例化

可以被实例化

不能包含实例构造函数

包含实例构造函数

 

语法:class  类名

{

         Public   static   数据类型  变量名;

         Public  static  返回的数据类型   方法名()

{

                   //

}

}

 

9.3.3:提供实例方法的文件和目录操作

FileInfo类和File功能类似(只不过前者要实例化,后者不用背实例化就可以用了)

 

 

FileInfo类

属性

说明

Exists

检查文件是否存在

Extension

获取文件的扩展名的字符串

Name

获取文件名

FullName

获取文件的完整目录(绝对路径)

CopyTo(string)   返回:FileInfo类型

  将现有的文件复制到新的指定为地方

Delete()     void

删除指定的文件

MoveTo();      void

吧此文件移动到指定的一个新的路径位置

 

 

 

 

DirectoryInfo类

与directory类型类似

 

用法步骤:

  DirectoryInfo  di= new DirectoryInfo(“指定的路径”);   //创建目录读取的对象

  DirectoryInfo[]   subDir=di.GetDirectories;           //返回当前的目录的子目录数组

  FileInfo[]   fi= new  GetFiles();                     //返回当前目录文件的列表(返回当前目录下的文件)

posted @ 2017-09-26 18:58  超爷95  阅读(433)  评论(0编辑  收藏  举报