深入.NET平台和C#编程

ACCP软件开发程序员

深入.NET平台和C#编程


第1章深入.NET框架

Micrrosoft.NET框架概述

1 . Microsoft .NET 介绍

2000年 ,微软公司向全国提供其具有革命的软件和服务平台 ,通过先进的软件技术和众多的智能设备,从而提供更简单,更具有个性化,更有效的互联网服务, .NET的战略目标是在任何时候(when)、任何地方(where)、使用任何工具(what)都能通过.NET的服获得网络上的任何信息。

2.NET框架的魅力

提供了一个面向对象的编程环境,完全支持面向对象编程。.NET框架提高了软件的可复用性、可扩展性、可维护和灵活性

.NET框架体系结构

1.NET框架结构

.NET框运行系统上,是 .NET最基础的框架。他提供了创建、部署和运行.NET应用的环境,主要包括公共语言运行时(CLR)和框架类库(.NET Framework 类库 ,FCL),并且支持多种开发语言 :

C#、VB.NET 、C++.NET

2 CLR

CLR的全称为公共语言运行时(Common Language Runtime)。它是所有.NET应用程序运行时环境,是所有.NET应用都要使用的编程基础,他如同一个支持.NET应用程序运行时和开发虚虚拟机。开发和运行一个.NET应用程序必须安装.NET Framework 。CLR也可以看成一个在执行时管理代码的包含两个组成部分: CLS(公共语言规范)CTS(通用类型系统)

1 .NET编译技术

为了实现跨语言开发和跨平台的战略目标, .NET所有的应用都不编译成微软中间代码(Microsoft lntermediate Language , MSIL)。 它将由JIT(Just In Time)编译器转换成代码

2 .CTS 公共语言规范 所有的.NET语言共享这一个类型系统,在他们之间可以实现无缝互操作

3.CLS 通用类型系统 通过定义公共语言规范,编译后的中间代码除了大小写之外还要有其他的不同之处。

3 FCL

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBjUjOIt-1582466847853)(file:///C:\Users\邝祝军\Documents\Tencent Files\2973481237\Image\C2C\FA16DB28CA84DB7A65B49BAA903B5125.jpg)]

面向对象回顾

1 类和对象

类和对象有着本质区别,类定义一组概念的模型,而对象是真实存在的实体

对于类的属性,我们通过 get {’只读}set{只写}访问

2 封装

类的三大特性之一 封装(Encapsulation).封装又称 为隐藏信息 ,用于尽可能隐藏内部的细节,只保留一些对外接口

3类图

类图将类的属性和行为以图的行为展示出来,使读者不用阅读大量代码即可明白类的功能之间的关系

第2章 深入C#数据类型

值类型和引用类型

1 概述

C#常用数据类型 : int 整形 float 浮点型 double 双精度型 string 字符串 bool 布尔型 enum 枚举类型

1 . 值类型

值类型数据所在的内存区或称为栈(Stack)。只要修改他,就会在他的内存保存这个值

2.引用类型

引用类型原于System.Object 家族

3.细分值类型和引用类型

​ 整形:int

​ 长整形 :long

​ 基本数据类型 浮点型 :float

​ 字符型:cahr

值类型 布尔型:bool

​ 枚举类型 枚举 :enum

​ 结构类型 结构 :s truct

​ 基类 :System.Object

​ 类 字符串:string

​ 自定义类:class

引用类型 接口 接口:interface

​ 数组 数组: int[] string []

2结构

1结构的定义

访问修饰符 struct 结构名

{

}

结构中可以有字段,也可以有方法。字段不能附初始值·,不能写无参构造函数

2结构的使用

可以不用new对象 直接定义结构的对象即可,使用结构对象后,必须给结构成员附初始值

4装箱拆箱

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

值方式参数传递

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

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

引用方式参数传递

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

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

集合概述

保存一组大小不固定的值

1ArrayList

ArrayList 非常类似数组,没有限定数据类型 涉及到频繁装箱拆箱

属性名称说明
count获取ArrayList中实际包含元素数
返回值类型方法名称说明
intadd(object void)将对象添加到ArrayList的结尾
voidRemoveAt(int index)移除ArrayList指定索引处的元素
voidRemove(object value)从ArrayList中移除特订对象
voidClear()从ArrayList中移除所有元素
2 Hashtable

Hashtable的数据是通过((Key)是唯一的)和值(value)来组织的

属性名称说明
count获取包含在Hashtable中键/值对的数目
Keys获取包含在Hashtable中键的集合
Values获取包含在Hashtable中值的机会
返回值类型方法名称说明
voidRemoveAt(int index)移除ArrayList指定索引处的元素
voidRemove(object value)从ArrayList中移除特订对象
voidClear()从ArrayList中移除所有元素
泛型和泛型集合
1 泛型

泛型引入了一个概念:类型参数。通过使用类型参数(T)减少了运行时强制转换或装箱拆箱的风险,通过泛型可以最大限度的重用代码,保护类型的安全及提高性能

2

泛型集合 list

限定数据类型 。添加元素方法和ArrayList是一样的 于ArrayList的区别

异同点ListArrayList
不同点对所有保存元素进行约束可以增加任何类型
添加/读取值类型元素无需拆箱装箱添加/读取值类型元素需要拆箱装箱
相同点通过索引访问集合中的元素
添加元素方法相同
删除元素方法相同
3 泛型集合 Dicionaty<K,V >

Dicionaty<K,V >的k 是string 类型的 V 是 value 是类(class)型 于Hashtable相似

泛型类

泛型类可以封装不是特定于具体数据类型的操作。

public class 类名<T>

{

}

T指类型参数 ,代表具体的数据类型,可以是类类型,也可以是基本数据类型

第4章 深入类的方法

1 . 构造函数

方法名与类名相同 ,没有返回值 , 主要初始化工作

2 . 无参构造函数

在没有定义构造函数 ,系统将会给类分配一个无参构造函数,并且没有方法体

我们也可以定义一个无参构造函数

访问修饰符 类名()

{

​ //方法体

}

3带参构造函数

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

{

​ //方法体

}

4 隐式构造函数

当不写构造函数时,系统自动给类分配一个无参构造函数,称为隐式构造函数 。 C#有一个规定,一旦有了构造函数,就不在自动分配构造函数

方法重载

构造函数重载

在实际生活中,处处可见方法重载的身影 例如: 某人 可以 唱歌 ,又可以跳舞

特点 同一个类 ,相同方法名,不同参数、个数不一样

对象交互
1概述

在面向对象的世界里,一切皆对象。对象与对象相互独立,互不干涉,但在一定外力的作用下,对象开始共同努力。

每个类都有自己的特征和功能,我们把它们封装为属性和方法 。对象之间通过属性和方法进行交互。可以认为方法的参数返回值都是对象间相互传递的消息。

2 对象交互实例

在面向对象的程序中,对象通过公开方法和属性完成与其他对象的交互。可以认为方法的参数及方法的返回值都是对象传递消息。

第六章 初始继承和多态

继承概述
什么是继承
1.移除类 的冗余代码

两个类中的描述相同属性的代码的相同代码也是相同的,这样冗余的代码是不可容忍的

2.继承的概念

其实生活中很多有继承的例子。例如: 人 每个 人都有 名字 性别 年龄 身高 ,我们都继承了 人

。人是父类(基类) 继承了的是 子类(派生类)

base 关键字 和 protected 修饰符

现在我们来看如何访问父类的成员。我们都知道 this表示当前实例,通过他可以访问本身的成员。

base 他表示父类,可以用于访问父类成员。

父类中的成员如果使用private修饰,他将作为私有成员,其他的类无法访问。如果设置protected,被这个访问修饰符的成员允许被其他子类访问。

子类构造函数

1隐式调用父类构造函数

子类继承父类,那么子类对象在创建中,父类用于,(注意)创建子类对象时会首先调用父类的构造函数,然后才会调用子类本身的构造函数。

2显示调用父类构造函数

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

继承的使用
继承的特性

1继承的传递性

汽车 --(卡车—(小型卡车)(重型卡车))(公共汽车–(单层)(双层))

2继承的单根性

一个子类不能同时继承多个父类、(能多接口)(sealed,是密封类,不能被继承)

is a 的应用

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

继承的价值

继承模式了现实世界的关系oop中强调一切皆对象,这符和我们编程的思考

实现了代码的重用性,继承使得程序结构清晰

多态

解决继承带来的问题

多态 ,一个实物的多种行态

什么是多态

一个实物的多种行态 例如 我们要求三种人 歌手 , 医生 , 厨师 他们都是不同的子类对象,他们都继承了人,每个对象得到一个“cut”,但是对于他们这个命令意思不同,三个不同的对象对于同一个方法调用表现不同行为。

实现多态

同一个方法名,在不同的情况下产生不同结果

第7章 深入理解多态

里氐替换和多态应用

里氐替换概述

原则上子类可以付给父类对象,也可以说子类可以替换父类并且出现父类能够出现任何地方,且程序不会发生变化,但返过来,父类对象是不是能替换子类对象 。这种特性被称为“里氐替换原则”

里氐替换原则的应用

里氐替换原则是软件设计该遵守的重要原则之一。有了里氐替换原则,才使继承复用成为可能,只有当子类可以替换父类时,软件的功能不受影响,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。

is 和as操作符的使用

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

as也可以强制转换来代替,不同的是,强制转换如果不成功将会异常报告 。as关键字如果失败返回null ,不会产生异常。

父类类型作为参数

里氐替换原则指出子类对象可以代替父类对象,那么在开发程序时可以编写以父类类型作为形式参数方法,在实际调用是传入子类对象

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

假如不希望这个父类被实例化,并且只提供方法的定义,自己不去实现这些方法。

访问修饰符 abstract 返回值类型 方法名();

含有抽象方法的类必然是抽象类,同样,我们用abstract关键字来定义一个抽象类

抽象类和抽象方法的应用
1 如何实现抽象方法

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

访问修饰符 override 返回值类型 方法名()

2抽象方法应用广举列

3.抽象方法应用场合

抽象类、抽象方法和虚方法都可以实现多态,那么什么时候选用抽象类和抽象方法呢。,抽象类
是抽象的概念,首先我们不希望它被实例化。例如,动物类,创建一个动物对象没有实在的意义.
它到底是什么动物?是猫还是虎?因此抽象类提供抽象方法,要求继承它的子类去实现,它通过这
些抽象方法来约束子类的行为。
例如,动物类有叫的行为,定义为抽象方法,猫类和狗类继承动物类,重写叫的方法,实现各
自的叫,从而实现了多态。

面向对象的三大特性

封装 :保证对象自身数据的完整性和安全性。

继承 :建立类之间的关系,实现代码复用,方便系统的扩展

。与子类重写父类的虚方法一样,在子类中也是使用override关键字来重写抽象方法的。

访问修饰符 override 返回值类型 方法名()

2抽象方法应用广举列

3.抽象方法应用场合

抽象类、抽象方法和虚方法都可以实现多态,那么什么时候选用抽象类和抽象方法呢。,抽象类
是抽象的概念,首先我们不希望它被实例化。例如,动物类,创建一个动物对象没有实在的意义.
它到底是什么动物?是猫还是虎?因此抽象类提供抽象方法,要求继承它的子类去实现,它通过这
些抽象方法来约束子类的行为。
例如,动物类有叫的行为,定义为抽象方法,猫类和狗类继承动物类,重写叫的方法,实现各
自的叫,从而实现了多态。

面向对象的三大特性

封装 :保证对象自身数据的完整性和安全性。

继承 :建立类之间的关系,实现代码复用,方便系统的扩展

多态: 相同的方法调用可实现不同的实现方式。一个事物的多种形态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值