01..net开发环境的的搭建和使用
【菜单栏】:
【文件】--》新建项目--》找到我们需要的项目类型
在新建项目窗口中,我们新建的项目要求可以在这里选择:
(1)版本选择:建议大家选择4或者4.6
(2)选择开发语言:一般都是C#
(3)项目类型:初学阶段一般都用“控制台”程序。仅仅是学习需要
(4)项目的名称,要有意义
(5)位置:项目所有文件的保存位置,建议不要使用中文目录
(6)解决方案名称:默认和项目名称一样
最后确定即可。
【视图】--》可以显示各种窗口
【调试】--》程序运行的入库(调试程序的入库)
调试:也就是尝试编译和运行程序,调试主要是我们开发阶段的选择,用来观察我们编写的程序
F5键必须会使用
【工具】--》选项,在这里可以对开发环境进行配置
提示:记住Ctrl+K+D 当前类的所有代码自动对齐
【Debug】:调试选项,开发中我们一般都用这个。
【Release】:发布选项,所有项目开发和调试完毕才使用的选项
【启动】:启动编译器,编译当前所写的代码,生成相关的文件。
【工具箱】:是在Windows程序中或者webForm程序中,用来拖放控件的
【调试相关窗口】:主要是程序调试中我们观察数据用的
ps:局部变量等窗口,需要在启动调试后,通过“调试”--》“窗口”再找到对应的窗口选项
【解决方案】:主要提供程序的统一编译
【属性窗口】:主要是对可视化的窗体和控件属性进行设置,我们用户设置完属性后,后台自动生成相关代码。
===================================【控制台项目结构】=============================
1、解决方案名称,一个解决方案里面可以有多个项目
2、当前项目结构:
(1)Properties文件夹:(属性文件夹)
AssemlyInfo.cs文件:里面的配置信息主要是用来保存项目的版权信息。
ps:在C#项目中,我们代码文件都是以.cs结尾。
(2)Program.cs文件:是项目的启动入口文件。
(3)我们自己添加的其他类文件(这个是我们后续学习的重点)
3、引用:就是我们当前项目所需要的.net底层模块
因为底层模块已经被微软工程师封装好了,我们只需要使用即可。
如果我们自己开发中,需要一些内容,但是没有自动引入,需要我们自己添加。
不同项目所需要的引用是不同的
引用只是说我们开发当前项目可以使用那些内容(模块)
4、命名空间
一个模块可以包含若干命名空间
我们在类中想使用那些内容,必须引入对应命名空间。
命名空间的概念:微软底层的类或我们自己添加的类,在实际开发中会很多,为了管理我们把不同的类放到不同的命名空间里面。
使用using关键字引入,引入后,我们可以直接使用这个命名空间下面的所有类。
如果不适用using引入命名空间,那么我们使用类的时候,就需要通过“命名空间.类名”方式使用。
//项目的命名空间,默认和项目名称一样
namespace MyFirstApp
{
}
一个类必须要包括在指定命名空间里面。
class Pragram
{
}
//class表示一个类,我们开发者写的代码,都是在class里面,class是我们程序的基本单元。
static void Main(string[] agrs)
{
}
//程序的入口,也就是程序启动的时候,首先执行的内容。这个方法是静态的,不要修改
控制台类Console类
Console.WriteLine("在这里面协商需要输出的内容")
Console.ReadLine()获取用户通过控制台输入的内容
5、C#程序编写的基本规范
(1)在C#中严格区分大小写
(2)每条语句写完后,要用分号结尾
(3)在代码编写中,一定要使用“英文半角”
========================================【.net项目编译、运行过程】===============================
1、非托管代码
特点:程序必须依赖于操作系统,而且编译器生成的程序文件包含的仅仅的是适用于特定CPU架构的机器指令
不足:不同的操作系统需要单独编写代码,重复低效
2、托管代码
最早就是Java跨平台设计思想,.NET从2003年开始,而且发展更新迅速
特点:
(1)开发者编写的代码编译后,不依赖于操作系统和特定的CPU架构机器指令,而是依赖于一种中间的,在各个系统上都能执行的代码。这种代码Java里面叫做ByteCode(字节码)。.NET里面我们称之为MSIL指令(微软中间语言)
(2)不管是Java的字节码还是.NET的MSIL指令仍然需要最终被翻译成CPU能够执行的机器指令。这个功能是有一个运行在特定操作系统上的软件来完成,这个软件我们称之为“虚拟机”
MSIL查看工具(ILDASM)
VS2010阶段,安装目录里面就有。
VS2013之后,我们需要自己查找。
exe文件:
编译后生成的可执行文件,里面是IL指令。项目发布或给用户可以直接运行的程序。
dll文件:
编译后生成的动态链接库文件。里面也是IL指令。
pdb文件:
Program Debug DataBase(程序调试数据库)文件
包含了编译后程序指向源代码的位置信息,用于调试的时候定位源码,方便调试。
vshost.exe文件
用于提高调试效率的宿主进程。
VS运行调试的时候,其实是打开的这个文件,这个程序可以让VS跟踪调试信息。
vshost.exe.manifest
是一个xml文件,用于com类,接口库的绑定和激活,这些信息以前是在注册中
==================================【其他小技巧强调】============================================
1、Main方法
(1)作用:程序入口方法,从这里开始运行
(2)要求:一个程序只能有一个Main()方法,首字母要大写、返回值为void或者int、命令行是可选的。
(3)Main方法的形式
形式1:static void Main(string[] args){}
形式2:static int Main(string[] args){}
形式3:static void Main(){}
形式4:static int Main(){}
2、C#中的注释
(1)作用:用来说明代码的作用,帮助程序员理解程序。注释是不参与编译
(2)单行注释、多行注释、文档注释
3、代码折叠器region
作用:将多行代码折叠,使得代码可读性增强,容易查询
要求:必须成对出现
4、程序中编写问题小结
(1)程序语句:
大小写:C#严格区分大小写,比如class和Class是完全不一样的
位置:类必须在指定的命名空间中,方法、属性、字段的定义,必须放到类中。
普通语句的执行,必须放到方法中
(2)引号
使用双引号“”,要求英文半角,并且成对出现。
字符串的定义必须使用双引号。
带空格的字符串“ ”和不带空格的字符串“”是完全不一样的。
(3)注释
关键性的语句需要添加注释
类名称前应该使用多行注释(文档注释),说明类的功能和使用方法。
复杂方法前面应该使用文档注释,说明方法的功能,参数的含义,返回值信息等。
文档注释一方面给我们开发者日后作参考,还有就是给调用者提供智能提示。
===============================【通过实例比较程序编写的两种思想】==============================
要求:这部分内容,请学员理解即可
1、程序的基本概念
(1)生活化理解:人们完成一件事,并得到一个结果,从做事开始到得到结果的步骤,及时程序。
(2)好处:对于重复性的事情,规定好步骤,熟能生巧,提高效率
(3)计算机程序:就是人们通过计算机完成一个或多个任务,这个任务需要编写计算机能够执行的指令。这些指令就是程序
程序语言:二进制机器指令:汇编语言CC++JavaC#
所有高级语言,最终都要被翻译成二进制指令(1,0)才能被计算机执行
高级语言到低级语言的“翻译官”,已经由语言开发工程师完成了
2、程序编写的两种思想
(1)面向过程是一种“过程/流程”为中心的编程思想
方法:分析问题,总结步骤,按照一定的流程完成任务
缺点:随着项目规模增大,业务复杂度提高,基于一个个函数编写,会变得非常杂乱!后续维护几乎无法完成,况且任务本身也不见得完成
适合:嵌入式开发,比如C语言。需要和硬件交互。
(2)面向对象是一种以“事物/对象”为中心的编程思想
思考:当然任务大致有几个?我们根据需求分析,知道当前需要完成两个数相加减运算任务,我们设计一个计算器对象,然后把两个任务封装成方法。然后,我们在主程序中,通过对象去完成这个运算的任务。
好处:我们把需要的任务,单独指派特定的对象,可以由更专业的人去完成,我们可以不用关心这个对象是怎么实现的,我们只管使用(封装)
对象的设计者,可以更集中的研究对象内部的实现,对象的调用者,只关心对象的使用。而不用关心对象那个的设计。(高内聚、低耦合)
对于项目后续的更新、维护,基于对象那个设计程序,会变得非常简单和方便。
面向对象的学习需要挺长的一个过程,大家可以慢慢体会。
适用:各种企业系统都适用
=============================【面向对象编程应该如何学习】======================================
1、面向对象三大特性
(1)封装:隐藏内部实现细节,模块开发者只关心内部实现,模块调用者只关心接口使用。
好处:安全性保障。(避免代码外泄)、快速应用、团队协作
应用:类是程序的基本单元。代码被封装到类里面,一个类是一个单元,是一个封装。方法也是一定程度的封装,模块又是对类的封装,系统在某些时候也是封装的体现。
(2)继承:复用技术
好处:一处更新,处处使用。
弊端:关联会越来越复杂
我们自己的编写的代码,一般使用继承关系的并不多
(3)多态
概念:让一个对象的接口可以根据不同的请求,作出不同的响应。
应用:继承多态、接口多态。
2、开发者必须要掌握OOP的各种原则
(1)单一原则(对象职责明确原则)
要求:一个对象只能做好一件事,必须专注,职责过多,会引起代码混乱,维护麻烦。如果一个类封装方法或属性的时候,比较多,就要考虑这些方法属性是不是属于这个对象
(2)开放封闭原则(开闭原则)
要求:需求变化时,尽量减少类的修改,而是通过扩展开完成。封闭修改,开发扩展。
(3)依赖倒置原则、接口隔离原则、里氏替换原则。
总结:学好面向对象编程,就是要掌握面向对象那个编程的各种原则,方法等指导我们如何写程序。同时要学习别人总结的各种技巧,规范、经验、模式等。
C#中常量的定义和使用
1、const 数据类型 常量名称 = 值;
2、常量必须在定义时初始化,常量的名字要全部大写;常量命名要有意义
枚举定义规范:
访问修饰符 enum 枚举值 {值1,值2...}
表示一组描述性的名词,名称可以对应具体的“整数值”
不能包含方法,一般都定义在类的外部
public enum Genders
{
male = 0, Female = 1
}
==============================【类和对象的初步总结】============================================
从以下方面把类的理解简单化:
(1)类规定能够存储的数据类型有哪些?能够执行的方法或者说能完成的任务是什么?
(2)类的数据类型(属性)和动作(方法),是根据软件的需求分析得到的。
(3)类定义仅仅是一个说明,保存在类文件中
(4)类是一种结构化的数据类型。(引用数据类型)
从以下方面把对象的理解简单化:
(1)对象以类为模板,通过对象使用类里面规定的数据类型和方法。
(2)对象在内存中。
(3)对象属性使用:对象名.属性名(通过set和get方法实现)
(4)对象方法使用:对象名.方法名
(5)对象通过调用属性获取对应字段的值或给字段赋值。因此,属性是外界访问私有字段的一个入口。
为什么要使用访问修饰符?
1、现实中:每个人都有自己的隐私和公开内容
2、开发中:有时候开发者在设计类的时候,一些成员(字段、属性、方法)无需提供给调用者
3、好处:充分体现面向对象里面的“封装”特性(oop三大特性:封装、继承、多态)
4、保证数据安全,方便调用者使用(如果成员很多,调用者使用比较困难)
访问修饰的类型:
1、private:只能在类的内部使用
2、public:在任何地方这个成员都能被使用
3、默认:类的方法、字段默认都是private,类的本身不写的话,默认是internal
4、开发经验:一般都建议显式的写明访问修饰符
关于字段:
1、字段又称为“成员变量”,一般用来在一个类的内部做数据交互使用,通常是private修饰。
2、字段命名规范:一般采用camel命名法
3、字段在对象创建过程中会首先被初始化(通过断点观察)
属性概述:
1、在OOP中,主要使用属性来描述对象的静态特征。
2、属性一般采用Pascal命名法,数据类型和对应字段一致。
3、属性是外界访问私有字段的一个入口,属性本身不保存任何数据。
使用属性能避免非法数据
1、实践用法:通常在get或set方法中可以添加需要的业务逻辑
2、对比:相当于数据库中的“约束”,因为约束是保证数据有效性的最后一个保障
可以设置只读属性:
1、有些属性为了保护数据,我们可以设置成只读,而不能赋值
2、方法:将set方法去掉即可。
3、经验:可以替代readonly
属性可以单独存在:
1、有时候某一个属性值可能不是直接返回一个对应私有字段的值,而是调用一些方法,或其他业务逻辑
自动属性:(prop 两次tab键)
使用特点
1、简化代码,私有字段编译器自动生成。
2、只适合于标准属性
3、不能添加任何业务逻辑。
使用条件
1、不能直接操作私有字段
2、不能使用只读、只写属性
字段与属性的总结与比较:
字段(成员变量)
1、字段主要是为了类的内部做数据交互使用,字段一般的为private
2、我们可以给字段赋值,也可以取值
3、当字段需要为外部提供数据时,将字段封装为属性,而不是共有的话字段。
属性
1、属性一般是向外提供数据访问,主要用来描述对象的静态特征,所以,一般是public
2、属性可以设置成只读、只写,提高数据安全性
3、属性内部可以添加业务逻辑,从而避免非法数据。
什么是方法?
从现实生活中理解方法
1、方法就是人们做事情的步骤或者过程、以及相关的要求总和。
2、人们完成一件事情通常有很多步骤,每个步骤也可能会有很多方法
软件程序中的方法
1、方法就是完成一个特定功能点的各种语句组合
2、系统实现一个完整的功能通常有很多的方法,每个方法中也可能会有很多其他方法的调用。
如何编写方法?
编写方法要考虑的内容:
1、通过项目的需求了解方法要完成的具体任务是什么?
2、确定方法的可访问性(private)
3、这个方法调用后能够产生的结果是什么?
4、给这个方法起一个“响亮”的名称
5、调用这个方法需要的条件是什么(参数)
方法具体定义规范
1、访问修饰符 返回值类型 方法名称(各个参数)
{
//方法具体要完成的任务
return 返回值
}
方法编写的参数设计要求:
1、一般方法的参数最好不要超过四个
2、参数过多的弊端:使得编写、调用、扩展非常麻烦,改进的方法是通过使用实体类
方法编写经验:
1、一般一个方法内部的代码,最好不要编写超过40行
2、适当的将方法分成若干个小方法,然后调用、独立修改,代码逻辑变得更清楚。
关于静态方法
静态方法使用技巧
1、使用static修饰
2、直接通过“类名.方法名”方法调用
3、一般在开发中,使用特别频繁的方法,可以使用静态方法,避免对象频繁创建耗费时间。
4、静态方法在项目启动的时候就存在了,一直到项目关闭为止,不受GC的管制
特别注意:
静态方法不宜使用过多
为什么要使用构造方法?
面向对象的强制性要求
1、构造方法是对象创建时用new关键字必须要调用的(观察对象的创建过程)
2、自己不定义任何构造方法时,编译器默认生成一个(用IL观察)。
初始化对象或其他任务
1、完成对象属性初始化(添加带参数的构造方法)
2、传递参数
3、还可以完成信息的读取,或其他对象的初始化等任务
多个构造方法之间的调用问题
1、使用:this(参数)方式
2、避免代码重复,展示编程水平,体现编程之美(经验总结)
3、继承中学习base关键字
构造方法PK实例方法
构造方法
1、用于对象的初始化,一个类中至少有一个构造方法
2、不能显式调用,只能在创建对象是,使用new来调用
3、构造方法不能有返回值
4、构造方法名称必须与类名一样
实例方法
1、用于表示对象能够干什么,一个类中可以没有任何实例方法
2、只能显式调用:对象名.方法名
3、可以有返回值,没有时必须以void表示
4、方法命名要有意义,一般是“动词+名词”形式,不能与类名相同
对象初始化器与构造方法的异同
相同点:
1、都是在对象创建时使用的
2、都可以完成对象属性初始化
不同点:
1、构造方法具有强制性,而对象初始化器没有强制性
2、对象初始化器只能完成“属性”初始化;而构造方法可以完成任何需要初始化的内容
3、对象初始化器无需提前定义;而构造方法必须类里面提前定义完成。
4、构造方法在.net1.0版本就有,而对象初始化器只能在.net3.0及其以上版本才能使用。
【菜单栏】:
【文件】--》新建项目--》找到我们需要的项目类型
在新建项目窗口中,我们新建的项目要求可以在这里选择:
(1)版本选择:建议大家选择4或者4.6
(2)选择开发语言:一般都是C#
(3)项目类型:初学阶段一般都用“控制台”程序。仅仅是学习需要
(4)项目的名称,要有意义
(5)位置:项目所有文件的保存位置,建议不要使用中文目录
(6)解决方案名称:默认和项目名称一样
最后确定即可。
【视图】--》可以显示各种窗口
【调试】--》程序运行的入库(调试程序的入库)
调试:也就是尝试编译和运行程序,调试主要是我们开发阶段的选择,用来观察我们编写的程序
F5键必须会使用
【工具】--》选项,在这里可以对开发环境进行配置
提示:记住Ctrl+K+D 当前类的所有代码自动对齐
【Debug】:调试选项,开发中我们一般都用这个。
【Release】:发布选项,所有项目开发和调试完毕才使用的选项
【启动】:启动编译器,编译当前所写的代码,生成相关的文件。
【工具箱】:是在Windows程序中或者webForm程序中,用来拖放控件的
【调试相关窗口】:主要是程序调试中我们观察数据用的
ps:局部变量等窗口,需要在启动调试后,通过“调试”--》“窗口”再找到对应的窗口选项
【解决方案】:主要提供程序的统一编译
【属性窗口】:主要是对可视化的窗体和控件属性进行设置,我们用户设置完属性后,后台自动生成相关代码。
===================================【控制台项目结构】=============================
1、解决方案名称,一个解决方案里面可以有多个项目
2、当前项目结构:
(1)Properties文件夹:(属性文件夹)
AssemlyInfo.cs文件:里面的配置信息主要是用来保存项目的版权信息。
ps:在C#项目中,我们代码文件都是以.cs结尾。
(2)Program.cs文件:是项目的启动入口文件。
(3)我们自己添加的其他类文件(这个是我们后续学习的重点)
3、引用:就是我们当前项目所需要的.net底层模块
因为底层模块已经被微软工程师封装好了,我们只需要使用即可。
如果我们自己开发中,需要一些内容,但是没有自动引入,需要我们自己添加。
不同项目所需要的引用是不同的
引用只是说我们开发当前项目可以使用那些内容(模块)
4、命名空间
一个模块可以包含若干命名空间
我们在类中想使用那些内容,必须引入对应命名空间。
命名空间的概念:微软底层的类或我们自己添加的类,在实际开发中会很多,为了管理我们把不同的类放到不同的命名空间里面。
使用using关键字引入,引入后,我们可以直接使用这个命名空间下面的所有类。
如果不适用using引入命名空间,那么我们使用类的时候,就需要通过“命名空间.类名”方式使用。
//项目的命名空间,默认和项目名称一样
namespace MyFirstApp
{
}
一个类必须要包括在指定命名空间里面。
class Pragram
{
}
//class表示一个类,我们开发者写的代码,都是在class里面,class是我们程序的基本单元。
static void Main(string[] agrs)
{
}
//程序的入口,也就是程序启动的时候,首先执行的内容。这个方法是静态的,不要修改
控制台类Console类
Console.WriteLine("在这里面协商需要输出的内容")
Console.ReadLine()获取用户通过控制台输入的内容
5、C#程序编写的基本规范
(1)在C#中严格区分大小写
(2)每条语句写完后,要用分号结尾
(3)在代码编写中,一定要使用“英文半角”
========================================【.net项目编译、运行过程】===============================
1、非托管代码
特点:程序必须依赖于操作系统,而且编译器生成的程序文件包含的仅仅的是适用于特定CPU架构的机器指令
不足:不同的操作系统需要单独编写代码,重复低效
2、托管代码
最早就是Java跨平台设计思想,.NET从2003年开始,而且发展更新迅速
特点:
(1)开发者编写的代码编译后,不依赖于操作系统和特定的CPU架构机器指令,而是依赖于一种中间的,在各个系统上都能执行的代码。这种代码Java里面叫做ByteCode(字节码)。.NET里面我们称之为MSIL指令(微软中间语言)
(2)不管是Java的字节码还是.NET的MSIL指令仍然需要最终被翻译成CPU能够执行的机器指令。这个功能是有一个运行在特定操作系统上的软件来完成,这个软件我们称之为“虚拟机”
MSIL查看工具(ILDASM)
VS2010阶段,安装目录里面就有。
VS2013之后,我们需要自己查找。
exe文件:
编译后生成的可执行文件,里面是IL指令。项目发布或给用户可以直接运行的程序。
dll文件:
编译后生成的动态链接库文件。里面也是IL指令。
pdb文件:
Program Debug DataBase(程序调试数据库)文件
包含了编译后程序指向源代码的位置信息,用于调试的时候定位源码,方便调试。
vshost.exe文件
用于提高调试效率的宿主进程。
VS运行调试的时候,其实是打开的这个文件,这个程序可以让VS跟踪调试信息。
vshost.exe.manifest
是一个xml文件,用于com类,接口库的绑定和激活,这些信息以前是在注册中
==================================【其他小技巧强调】============================================
1、Main方法
(1)作用:程序入口方法,从这里开始运行
(2)要求:一个程序只能有一个Main()方法,首字母要大写、返回值为void或者int、命令行是可选的。
(3)Main方法的形式
形式1:static void Main(string[] args){}
形式2:static int Main(string[] args){}
形式3:static void Main(){}
形式4:static int Main(){}
2、C#中的注释
(1)作用:用来说明代码的作用,帮助程序员理解程序。注释是不参与编译
(2)单行注释、多行注释、文档注释
3、代码折叠器region
作用:将多行代码折叠,使得代码可读性增强,容易查询
要求:必须成对出现
4、程序中编写问题小结
(1)程序语句:
大小写:C#严格区分大小写,比如class和Class是完全不一样的
位置:类必须在指定的命名空间中,方法、属性、字段的定义,必须放到类中。
普通语句的执行,必须放到方法中
(2)引号
使用双引号“”,要求英文半角,并且成对出现。
字符串的定义必须使用双引号。
带空格的字符串“ ”和不带空格的字符串“”是完全不一样的。
(3)注释
关键性的语句需要添加注释
类名称前应该使用多行注释(文档注释),说明类的功能和使用方法。
复杂方法前面应该使用文档注释,说明方法的功能,参数的含义,返回值信息等。
文档注释一方面给我们开发者日后作参考,还有就是给调用者提供智能提示。
===============================【通过实例比较程序编写的两种思想】==============================
要求:这部分内容,请学员理解即可
1、程序的基本概念
(1)生活化理解:人们完成一件事,并得到一个结果,从做事开始到得到结果的步骤,及时程序。
(2)好处:对于重复性的事情,规定好步骤,熟能生巧,提高效率
(3)计算机程序:就是人们通过计算机完成一个或多个任务,这个任务需要编写计算机能够执行的指令。这些指令就是程序
程序语言:二进制机器指令:汇编语言CC++JavaC#
所有高级语言,最终都要被翻译成二进制指令(1,0)才能被计算机执行
高级语言到低级语言的“翻译官”,已经由语言开发工程师完成了
2、程序编写的两种思想
(1)面向过程是一种“过程/流程”为中心的编程思想
方法:分析问题,总结步骤,按照一定的流程完成任务
缺点:随着项目规模增大,业务复杂度提高,基于一个个函数编写,会变得非常杂乱!后续维护几乎无法完成,况且任务本身也不见得完成
适合:嵌入式开发,比如C语言。需要和硬件交互。
(2)面向对象是一种以“事物/对象”为中心的编程思想
思考:当然任务大致有几个?我们根据需求分析,知道当前需要完成两个数相加减运算任务,我们设计一个计算器对象,然后把两个任务封装成方法。然后,我们在主程序中,通过对象去完成这个运算的任务。
好处:我们把需要的任务,单独指派特定的对象,可以由更专业的人去完成,我们可以不用关心这个对象是怎么实现的,我们只管使用(封装)
对象的设计者,可以更集中的研究对象内部的实现,对象的调用者,只关心对象的使用。而不用关心对象那个的设计。(高内聚、低耦合)
对于项目后续的更新、维护,基于对象那个设计程序,会变得非常简单和方便。
面向对象的学习需要挺长的一个过程,大家可以慢慢体会。
适用:各种企业系统都适用
=============================【面向对象编程应该如何学习】======================================
1、面向对象三大特性
(1)封装:隐藏内部实现细节,模块开发者只关心内部实现,模块调用者只关心接口使用。
好处:安全性保障。(避免代码外泄)、快速应用、团队协作
应用:类是程序的基本单元。代码被封装到类里面,一个类是一个单元,是一个封装。方法也是一定程度的封装,模块又是对类的封装,系统在某些时候也是封装的体现。
(2)继承:复用技术
好处:一处更新,处处使用。
弊端:关联会越来越复杂
我们自己的编写的代码,一般使用继承关系的并不多
(3)多态
概念:让一个对象的接口可以根据不同的请求,作出不同的响应。
应用:继承多态、接口多态。
2、开发者必须要掌握OOP的各种原则
(1)单一原则(对象职责明确原则)
要求:一个对象只能做好一件事,必须专注,职责过多,会引起代码混乱,维护麻烦。如果一个类封装方法或属性的时候,比较多,就要考虑这些方法属性是不是属于这个对象
(2)开放封闭原则(开闭原则)
要求:需求变化时,尽量减少类的修改,而是通过扩展开完成。封闭修改,开发扩展。
(3)依赖倒置原则、接口隔离原则、里氏替换原则。
总结:学好面向对象编程,就是要掌握面向对象那个编程的各种原则,方法等指导我们如何写程序。同时要学习别人总结的各种技巧,规范、经验、模式等。
C#中常量的定义和使用
1、const 数据类型 常量名称 = 值;
2、常量必须在定义时初始化,常量的名字要全部大写;常量命名要有意义
枚举定义规范:
访问修饰符 enum 枚举值 {值1,值2...}
表示一组描述性的名词,名称可以对应具体的“整数值”
不能包含方法,一般都定义在类的外部
public enum Genders
{
male = 0, Female = 1
}
==============================【类和对象的初步总结】============================================
从以下方面把类的理解简单化:
(1)类规定能够存储的数据类型有哪些?能够执行的方法或者说能完成的任务是什么?
(2)类的数据类型(属性)和动作(方法),是根据软件的需求分析得到的。
(3)类定义仅仅是一个说明,保存在类文件中
(4)类是一种结构化的数据类型。(引用数据类型)
从以下方面把对象的理解简单化:
(1)对象以类为模板,通过对象使用类里面规定的数据类型和方法。
(2)对象在内存中。
(3)对象属性使用:对象名.属性名(通过set和get方法实现)
(4)对象方法使用:对象名.方法名
(5)对象通过调用属性获取对应字段的值或给字段赋值。因此,属性是外界访问私有字段的一个入口。
为什么要使用访问修饰符?
1、现实中:每个人都有自己的隐私和公开内容
2、开发中:有时候开发者在设计类的时候,一些成员(字段、属性、方法)无需提供给调用者
3、好处:充分体现面向对象里面的“封装”特性(oop三大特性:封装、继承、多态)
4、保证数据安全,方便调用者使用(如果成员很多,调用者使用比较困难)
访问修饰的类型:
1、private:只能在类的内部使用
2、public:在任何地方这个成员都能被使用
3、默认:类的方法、字段默认都是private,类的本身不写的话,默认是internal
4、开发经验:一般都建议显式的写明访问修饰符
关于字段:
1、字段又称为“成员变量”,一般用来在一个类的内部做数据交互使用,通常是private修饰。
2、字段命名规范:一般采用camel命名法
3、字段在对象创建过程中会首先被初始化(通过断点观察)
属性概述:
1、在OOP中,主要使用属性来描述对象的静态特征。
2、属性一般采用Pascal命名法,数据类型和对应字段一致。
3、属性是外界访问私有字段的一个入口,属性本身不保存任何数据。
使用属性能避免非法数据
1、实践用法:通常在get或set方法中可以添加需要的业务逻辑
2、对比:相当于数据库中的“约束”,因为约束是保证数据有效性的最后一个保障
可以设置只读属性:
1、有些属性为了保护数据,我们可以设置成只读,而不能赋值
2、方法:将set方法去掉即可。
3、经验:可以替代readonly
属性可以单独存在:
1、有时候某一个属性值可能不是直接返回一个对应私有字段的值,而是调用一些方法,或其他业务逻辑
自动属性:(prop 两次tab键)
使用特点
1、简化代码,私有字段编译器自动生成。
2、只适合于标准属性
3、不能添加任何业务逻辑。
使用条件
1、不能直接操作私有字段
2、不能使用只读、只写属性
字段与属性的总结与比较:
字段(成员变量)
1、字段主要是为了类的内部做数据交互使用,字段一般的为private
2、我们可以给字段赋值,也可以取值
3、当字段需要为外部提供数据时,将字段封装为属性,而不是共有的话字段。
属性
1、属性一般是向外提供数据访问,主要用来描述对象的静态特征,所以,一般是public
2、属性可以设置成只读、只写,提高数据安全性
3、属性内部可以添加业务逻辑,从而避免非法数据。
什么是方法?
从现实生活中理解方法
1、方法就是人们做事情的步骤或者过程、以及相关的要求总和。
2、人们完成一件事情通常有很多步骤,每个步骤也可能会有很多方法
软件程序中的方法
1、方法就是完成一个特定功能点的各种语句组合
2、系统实现一个完整的功能通常有很多的方法,每个方法中也可能会有很多其他方法的调用。
如何编写方法?
编写方法要考虑的内容:
1、通过项目的需求了解方法要完成的具体任务是什么?
2、确定方法的可访问性(private)
3、这个方法调用后能够产生的结果是什么?
4、给这个方法起一个“响亮”的名称
5、调用这个方法需要的条件是什么(参数)
方法具体定义规范
1、访问修饰符 返回值类型 方法名称(各个参数)
{
//方法具体要完成的任务
return 返回值
}
方法编写的参数设计要求:
1、一般方法的参数最好不要超过四个
2、参数过多的弊端:使得编写、调用、扩展非常麻烦,改进的方法是通过使用实体类
方法编写经验:
1、一般一个方法内部的代码,最好不要编写超过40行
2、适当的将方法分成若干个小方法,然后调用、独立修改,代码逻辑变得更清楚。
关于静态方法
静态方法使用技巧
1、使用static修饰
2、直接通过“类名.方法名”方法调用
3、一般在开发中,使用特别频繁的方法,可以使用静态方法,避免对象频繁创建耗费时间。
4、静态方法在项目启动的时候就存在了,一直到项目关闭为止,不受GC的管制
特别注意:
静态方法不宜使用过多
为什么要使用构造方法?
面向对象的强制性要求
1、构造方法是对象创建时用new关键字必须要调用的(观察对象的创建过程)
2、自己不定义任何构造方法时,编译器默认生成一个(用IL观察)。
初始化对象或其他任务
1、完成对象属性初始化(添加带参数的构造方法)
2、传递参数
3、还可以完成信息的读取,或其他对象的初始化等任务
多个构造方法之间的调用问题
1、使用:this(参数)方式
2、避免代码重复,展示编程水平,体现编程之美(经验总结)
3、继承中学习base关键字
构造方法PK实例方法
构造方法
1、用于对象的初始化,一个类中至少有一个构造方法
2、不能显式调用,只能在创建对象是,使用new来调用
3、构造方法不能有返回值
4、构造方法名称必须与类名一样
实例方法
1、用于表示对象能够干什么,一个类中可以没有任何实例方法
2、只能显式调用:对象名.方法名
3、可以有返回值,没有时必须以void表示
4、方法命名要有意义,一般是“动词+名词”形式,不能与类名相同
对象初始化器与构造方法的异同
相同点:
1、都是在对象创建时使用的
2、都可以完成对象属性初始化
不同点:
1、构造方法具有强制性,而对象初始化器没有强制性
2、对象初始化器只能完成“属性”初始化;而构造方法可以完成任何需要初始化的内容
3、对象初始化器无需提前定义;而构造方法必须类里面提前定义完成。
4、构造方法在.net1.0版本就有,而对象初始化器只能在.net3.0及其以上版本才能使用。