C#程序设计复习总结.docx
- 文档编号:6075049
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:45
- 大小:102.71KB
C#程序设计复习总结.docx
《C#程序设计复习总结.docx》由会员分享,可在线阅读,更多相关《C#程序设计复习总结.docx(45页珍藏版)》请在冰豆网上搜索。
C#程序设计复习总结
C#程序设计
Ø绪论
Ø基础:
控制语句、数据类型
Ø类:
方法、属性、委托、事件
Ø异常处理
Ø窗体、控件
Ø文件访问、数据库
Ø绘图
第一章绪论
一C#特点
ØC#是一种简洁、类型安全的面向对象的语言,开发人员可以使用它来构建在.NETFramework上运行的各种安全、可靠的应用程序。
Ø使用C#,您可以创建传统的Windows客户端应用程序、XMLWebservices、分布式组件、客户端-服务器应用程序、数据库应用程序以及很多其他类型的程序。
ØMicrosoftVisualC#2005提供高级代码编辑器、方便的用户界面设计器、集成调试器和许多其他工具,以在C#语言版本2.0和.NETFramework的基础上加快应用程序的开发。
ØC#语法表现力强,而且简单易学。
ØC#的大括号语法使任何熟悉C、C++或Java的人都可以立即上手。
ØC#语法简化了C++的诸多复杂性,同时提供了很多强大的功能,例如可为空的值类型、枚举、委托、匿名方法和直接内存访问。
ØC#支持泛型方法和类型,从而提供了更出色的类型安全和性能。
作为一种面向对象的语言,C#支持封装、继承和多态性概念。
Ø所有的变量和方法,包括Main方法(应用程序的入口点),都封装在类定义中。
Ø类可能直接从一个父类继承,但它可以实现任意数量的接口。
重写父类中的虚方法的各种方法要求override关键字作为一种避免意外重定义的方式。
Ø在C#中,结构类似于一个轻量类;它是一种堆栈分配的类型,可以实现接口,但不支持继承。
C#还通过几种创新的语言结构加快了软件组件的开发,其中包括:
Ø封装的方法签名(称为委托),它实现了类型安全的事件通知。
Ø属性(Property),充当私有成员变量的访问器。
Ø属性(Attribute),提供关于运行时类型的声明性元数据。
Ø内联XML文档注释在
ØC#中,如果需要与其他Windows软件(如COM对象或本机Win32DLL)交互,可以通过一个称为“Interop”的过程来实现。
Ø互操作使C#程序能够完成本机C++应用程序可以完成的几乎任何任务。
Ø在直接内存访问必不可少的情况下,C#甚至支持指针和“不安全”代码的概念。
ØC#的生成过程比C和C++简单,比Java更为灵活。
Ø没有单独的头文件,也不要求按照特定顺序声明方法和类型。
C#源文件可以定义任意数量的类、结构、接口和事件
二.NETFramework平台体系结构
Ø.NETFramework是Windows的一个必要组件,包括一个称为公共语言运行时(CLR)的虚拟执行系统和一组统一的类库。
ØCLR是Microsoft的公共语言基础结构(CLI)的一个商业实现。
CLI是一种国际标准,是用于创建语言和库在其中无缝协同工作的执行和开发环境的基础。
Ø用C#编写的源代码被编译为一种符合CLI规范的中间语言(IL)。
IL代码与资源(如位图和字符串)一起作为一种称为程序集的可执行文件存储在磁盘上,通常具有的扩展名为.exe或.dll。
程序集包含清单,它提供关于程序集的类型、版本、区域性和安全要求等信息。
Ø语言互操作性是.NETFramework的一个关键功能。
Ø因为由C#编译器生成的IL代码符合公共类型规范(CTS),因此从C#生成的IL代码可以与从VisualBasic、VisualC++、VisualJ#的.NET版本或者其他20多种符合CTS的语言中的任何一种生成的代码进行交互。
Ø
单一程序集可能包含用不同.NET语言编写的多个模块,并且类型可以相互引用,就像它们是用同一种语言编写的。
三.命名空间
namespace:
用于声明一个范围。
此命名空间范围允许您组织代码并为您提供了创建全局唯一类型的方法。
四.Main方法
ØMain方法是程序的入口点,您将在那里创建对象和调用其他方法。
一个C#程序中只能有一个入口点。
程序控制在该方法中开始和结束。
Ø该方法在类或结构的内部声明。
它必须为静态方法,且不应为公共方法。
Ø它可以具有void或int返回类型。
Ø声明Main方法时既可以使用参数,也可以不使用参数。
如果使用参数,则参数为string[]类型。
Ø参数可以作为从零开始索引的命令行参数来读取。
与C和C++不同,程序的名称不会被当作第一个命令行参数。
第二章基础:
控制语句、数据类型
一.文档注释
使用3个斜杠“///”符号:
这种注释可帮助用户创建自定义外部文档代码。
C#利用文档注释,使用XML的标记来获得程序代码的XML文档,即可把对一个程序的注释转换为一个文档保存,所以文档注释又称为XML注释。
二标识符
与C/C++规定大致相同。
C#语言的标识符名称必须遵守以下规则:
Ø所有的标识符只能由字母、数字和下划线这三类字符组成,而且第一个字符必须为字母或下划线;
Ø标识符区分大小写;
Ø标识符不能与C#关键字名相同。
三关键字
Ø关键字(Keyword)也称为保留字,它是由系统预先定义好的标识符,在C#语言中有特定的含义。
四.变量
Ø变量的命名:
符合标识符的命名规则,最好“见名知意”
Ø变量的使用:
变量必须先定义(声明)后使用。
[特征][修饰符]数据类型变量名1,…,变量名n;
局部变量经初始化后方可使用
Ø变量的作用域和生存周期:
⏹作用域定义了一个变量的可见性和生存周期。
⏹一个变量的生存周期被限制在它自身的作用域内。
⏹作用域可以嵌套。
⏹在内层作用域定义的变量不能和外层作用域中定义的变量重名。
Ø变量类型:
⏹静态变量:
使用static修饰符定义的变量称为静态变量。
对静态变量的访问只能通过类型名,而不能用实例名访问。
静态变量的初始值就是该类型变量的默认值。
静态变量最好在定义时赋值。
⏹实例变量:
不使用static修饰符定义的变量称为实例变量。
例如:
inta;(类中的实例变量,结构中的实例变量)
⏹数组元素
数组中每个元素的初始值为该数组元素类型的默认值。
数组元素最好在初始化时被赋值。
⏹值参数
值参数向方法中传递的是数据的值。
⏹引用参数
当一个带有ref修饰符的参数被声明时,称为引用参数;
向它传递的不是值而是对调用变量的引用。
⏹输出参数
当一个带有out修饰符的参数被声明时,称为输出参数。
它只能用于传递方法返回的数据,而不能向方法内部传递参数。
⏹局部变量
局部变量被局部变量声明语句创建。
当控制权进入block块、for循环语句或者switch分支语句时,其中的相关局部变量被创建。
当控制权离开block块、for循环语句或者switch分支语句时,其中的相关局部变量随即失效。
局部变量不会被自动初始化。
在一个局部变量的有效范围中,在它被声明之前的所有关于它的引用都是错误的
五.常量
常量(Constant)是指在程序执行过程中其值不能被改变的量。
定义常量的一般格式为:
constdoublePI=3.14159;
六.C#运算符
单目运算符:
如-x、x++、sizeof(x);双目运算符:
如x+y、x%y;三目运算符:
如条件运算符“?
:
”
Ø
运算符的优先级
Ø赋值运算符
⏹一般的赋值运算
赋值表达式的格式如下:
变量=表达式;例如:
inti=10;
⏹复合赋值:
双目运算符与赋值运算符的组合,简化了赋值语句的书写例如:
a+=b;
⏹赋值中的类型转换
如果赋值运算发生在不同的数据类型之间,当它们是兼容的数据类型时,则右边的值自动转换成左边的变量类型。
当高精度向低精度转换时必须使用显式转换
Ø算术运算符
+加法运算符,或正值运算符
-减法运算符,或负值运算符
*乘法运算符
/除法运算符
%模运算符或称求余运算符,如7%3=1
Ø关系运算符
<(小于)、<=(小于等于)、>(大于)、>=(大于等于),==(等于)、!
=(不等于)
关系运算符用于两个值进行比较,其运算结果为true(真)或false(假)
Ø逻辑运算符
逻辑表达式的结果是一个布尔值,结果为真则为true,结果为假则为false。
C#中的逻辑运算符如下:
&&(逻辑与)||(逻辑或)!
(逻辑非)
Ø位运算符
位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整型或者是可以转换为整型的任何其他类型。
C#中的位运算符如下:
~(按位求反)、&(按位与)|(按位或)、^(按位异或)<<(左移)、>>(右移)
Ø条件运算符
表达式1?
表达式2:
表达式3例如:
max=((a>b)?
a:
b)
在C#中第一个操作数必须是一个布尔表达式,或者是可以转换为布尔类型的表达式,否则编译会出现错误。
Ø自增、自减运算符
自增(++)、自减(--)运算符都是单目运算符,其作用是以一种紧凑格式使变量的值自动增1或减1。
运算符后置用法,代表先使用变量,然后对变量增值,运算符前置用法,代表先对变量增值,再使用变量
Ø其他运算符
⏹new运算符:
new操作符用于创建一个新的类型实例。
例如:
Aa=newA();int[]a=newint[10];
⏹is运算符
变量(表达式)is数据类型
⏹as运算符
表达式1=表达式2as数据类型Aa=null;if(oisA)a=oasA;
⏹typeof运算符
typeof运算符可以获得指定类型的System.Type对象。
typeof表达式的一般格式为:
typeof(类型)
⏹sizeof运算符
sizeof运算符用于计算所定义的数值型变量在内存中占多少字节。
sizeof表达式的一般格式为:
第三章程序流程控制
一.语句块
语句块也被称为复合语句,它是用一对花括号“{}”括起的语句序列假如此语句序列被省略,则称块为空。
块可以嵌套。
Øif语句,还可以使用else-if方法处理多个条件
Øswitch语句:
switch(表达式)
{case常量表达式1:
{语句组1}break;
……case常量表达式n:
{语句组n}break;
default:
{语句组n+1}break;
}
(1)switch语句可以包括任意数目的case实例,但是任何两个case语句都不能具有相同的值。
语句体从选定的语句开始执行,直到break将控制传递到case体以外。
(2)在每一个case块(不论它是case语句还是default语句)的后面,都必须有一个跳转语句(如break)。
(3)C#不支持从一个case标签显式贯穿到另一个case标签。
但有一个例外,这个例外是当case语句中没有代码时。
(4)switch语句后面括号中的表达式类型可以是string类型。
Øwhile语句
使用break语句结束while循环,执行后续语句;
使用continue语句停止循环体的执行,继续进行while循环。
Ødo-while语句同样允许用break语句和continue语句
Øfor语句
Øforeach语句
foreach(变量类型循环变量in集合表达式)
{循环体}
⏹1.对数组使用foreach语句
foreach语句可用来为数组中的每一个元素执行一遍循环体中的语句。
因为不需要数组中的元素直接参与运算,也不需要事先知道数组元素的个数,所以对全体数组进行操作时用foreach语句效率很高。
⏹2.对集合使用foreach语句
通常要求集合必须实现IEnumerable和IEnumerator接口,才能使用foreach。
⏹3.通常foreach语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作
classForEachTest
{
staticvoidMain(string[]args)
{
int[]fibarray=newint[]{0,1,2,3,5,8,13};
foreach(intiinfibarray)
{
System.Console.WriteLine(i);
}
}
}
Øbreak语句
⏹break语句用于终止最内层的while、do-while、for和switch语句的执行。
⏹当程序遇到这一语句后,执行紧接在被终止执行的语句后面的语句。
⏹其语法格式为:
beak;
Øcontinue语句
⏹当程序遇到这一语句后,停止当前进行的这次循环并把控制返回到当前循环的顶部,以便于进行下一次循环。
⏹与break语句不同的是,continue语句不是终止整个循环的执行,而仅仅终止当前这一次循环的执行。
⏹其语法格式为:
continue;
Øgoto语句
⏹goto语句也能用来跳出循环和switch语句。
它无条件地转移程序的执行控制,其转移目的地是一标号,因此要求标号与goto语句处在同一个函数中。
⏹其语法格式为:
goto标号;gotocase表达式;gotodefault;
⏹由于大量或随意使用goto语句会使程序的流程无规律,程序的可读性降低,因此,目前该语句已经很少使用。
Øreturn语句
⏹return语句将程序执行控制返回给该语句所在的函数成员的调用者。
⏹其语法格式为:
return表达式;
⏹return语句的表达式是可选的。
⏹不能在finally块中使用return语句。
第四章条件编译和控制台输入输出
一条件编译
C#的条件编译主要依靠预处理指令:
#if、#else、#elif和#endif,这四条预处理指令主要有以下四种基本组合方式:
Ø#if(判断条件)…#endif
Ø#if(判断条件)…#else…#endif
Ø#if(判断条件)…#elif(判断条件)…#endif
Ø#if(判断条件)…#elif(判断条件)…#else…#endif
ØC#语言使用#define来定义符号,其一般的定义形式为:
#define符号
Ø与#define相对应,#undef指令可以用来撤消定义的符号,其一般的定义形式为:
#undef符号
Ø#undef和#define必须放在所有其他非注释语句和非预处理指令语句的前面。
二定义代码块指令
#region和#endregion用来指定需要采用扩展或者压缩方式显示的代码段,一般的使用格式如下:
#region字符串代码块#endregion
#region和#endregion要配对使用,#region标识代码块的头,#endregion标识代码块的尾。
三.控制台I/O
是由System.Console类
提供给用户访问标准输入、标准输出以及标准错误流
ØConsole.Read()方法
Read()方法是一个静态方法,调用的格式为:
Console.Read
Read()方法每次从标准输入流中读取一个字符,程序将接收的字符作为int型值返回给变量。
如果输入流中没有可用字符,则返回-1。
ØConsole.ReadLine()方法
⏹ReadLine()方法也是一个静态方法,调用的格式为:
Console.ReadLine
⏹ReadLine()方法用于从控制台中一次读取一行字符串,直到遇到Enter键才返回读取的字符串。
但此字符串中不包含Enter键和换行符(‘\r\n’)。
⏹如果没有接收到任何输入,或接收了无效的输入,那么ReadLine()方法将返回null。
Ø基本的数据输出
⏹基本数据类型的简单输出形式为:
Console.Write(“格式串”,参数表);或Console.WriteLine(“格式串”,参数表);
Ø格式化输出
⏹标准格式化输出
其使用形式为:
Console.WriteLine(“格式”,对象1,…);
其中,格式含静态文本和标志符两部分,标志符表示由参数表所替换的项目以及它的格式化。
通用的格式为:
{N[,M][:
格式串]}
⏹自定义格式化输出
一般形式为:
onsole.WriteLine(“{项目数},{0:
自定义格式说明符}”,参数表);
⏹日期和时间的格式化输出
获取日期和时间:
可以通过DateTime类获取完整的日期和时间。
格式化日期和时间:
日期和时间的格式化说明符如表4-5所示。
Ø字符串的处理方法
⏹String类的字符串方法
(1)可以直接输出字符串,也可以使用“+”操作符来连接字符串进行输出。
(2)可以使用索引值,从一个字符串的某一特定位置提取一个字符。
(3)可以调用string类的所有属性和方法,调用格式为:
String.方法名()。
⏹Parse()方法
Parse()方法可以将字符串转换为数值类型数据,而且被转换的字符串可以包含格式化数据,也可以是由数字字符组成的字符串。
调用Parse()方法的常用格式为:
publicstatic数据类型.Parse(strings);
⏹ToString()方法
ToString()用于将某个数据类型转换为字符串类型。
调用格式为:
对象.ToString();
第五章类
面向对象程序设计
面向对象=对象+类+继承+通信
(1)抽象
(2)封装
(3)继承
(4)多态性
面向过程:
过程函数事必躬亲
面向对象:
各个类各司其职
一类与对象
Ø对象(object)
⏹对象指的是一个实体的实例,在这个实体中包括了特定的属性数据和对这些数据进行操作的函数。
⏹封装性、继承性、多态性
Ø类(class)
⏹类是一组具有相同数据结构和相同操作的对象的集合。
⏹在一个类中,每个对象都是类的实例,可以使用类中提供的方法。
⏹创建类的对象的操作,被称为类的实例化
Ø类的定义。
⏹类声明语句声明一个新类,其语法格式为:
[访问修饰符]class类名[:
基类名和任何实现接口的列表]
{
[访问修饰符]数据成员
[访问修饰符]方法成员
}
⏹访问修饰符
●类访问修饰符:
public:
访问不受限制。
Internal:
访问仅限于当前程序集。
●类成员访问修饰符:
public:
访问不受限制。
protected:
访问仅限于包含类或从包含类派生的类型。
internal:
访问仅限于当前程序集。
protectedinternal:
访问仅限于当前程序集或从包含类派生的类型。
private:
访问仅限于包含类型。
⏹类的成员构成
●数据成员
常量,字段
●函数(方法)成员
构造函数和析构函数,方法,属性,事件,索引器(下标指示器),操作符
●嵌套的类型
●构造函数
通常用于初始化对象
在创建对象时被自动调用,不能像其他方法那样显式调用
构造函数名与类名相同,没有返回类型和值,可以重载
通常用public修饰,但特殊情况下也可用protected、private等修饰
若没有定义构造函数,C#会自动生成一个默认构造函数
●析构函数
析构函数用于析构类的实例。
不能在结构中定义析构函数。
只能对类使用析构函数。
一个类只能有一个析构函数。
无法继承或重载析构函数。
无法调用析构函数。
它们是被自动调用的。
析构函数既没有修饰符,也没有参数。
注意:
程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。
可实现IDisposable实现显式资源释放
●This
this关键字引用类的当前实例。
限定被相似的名称隐藏的成员
publicEmployee(stringname,stringalias)
{this.name=name;
this.alias=alias;}
将对象作为参数传递到其他方法CalcTax(this);
Keywords_this示例
●字段(field)
字段是包含在类或结构中的对象或值。
字段使类和结构可以封装数据。
字段通常应为private。
外部类应当通过方法、属性或索引器来间接访问字段。
声明字段时可以使用赋值运算符为字段指定一个初始值。
如果构造函数为字段分配了值,则它将改写字段声明期间给定的任何值。
字段初始值设定项不能引用其他实例字段。
publicclassCalendarDate
{privateintmonth;
privateintday;
privateintyear;}
●属性
它们提供灵活的机制来读取、编写或计算私有字段的值。
可以像使用公共数据成员一样使用属性,但实际上它们是称为“访问器”的特殊方法。
属性使得数据在可被轻松访问的同时,仍能提供方法的安全性和灵活性。
属性使类能够以一种公开的方法获取和设置值,同时隐藏实现或验证代码。
get属性访问器用于返回属性值,而set访问器用于分配新值。
这些访问器可以有不同的访问级别。
value关键字用于定义由set索引器分配的值。
不实现set方法的属性是只读的。
classTimePeriod
{
privatedoubleseconds;
publicdoubleHours
{
get{returnseconds/3600;}
set{seconds=value*3600;}
}
}
classProgram
{
staticvoidMain()
{
TimePeriodt=newTimePeriod();
//AssigningtheHourspropertycausesthe'set'accessortobecalled.
t.Hours=24;
//EvaluatingtheHourspropertycausesthe'get'accessortobecalled.
System.Console.WriteLine("Timeinhours:
"+t.Hours);
}
}
publicclassCircle
{
privatedoubleradius;
privatedoublex;
privatedoubley;
publicdoubleRadius
{
get{returnradius;}
set{
if(value<0)
thrownewException("Radiusmustbe>=0.");
radius=value;
}
}
publicdoubleArea
{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 程序设计 复习 总结