C#学习笔记.docx

上传人:b****5 文档编号:4956136 上传时间:2022-12-12 格式:DOCX 页数:44 大小:65.54KB
下载 相关 举报
C#学习笔记.docx_第1页
第1页 / 共44页
C#学习笔记.docx_第2页
第2页 / 共44页
C#学习笔记.docx_第3页
第3页 / 共44页
C#学习笔记.docx_第4页
第4页 / 共44页
C#学习笔记.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

C#学习笔记.docx

《C#学习笔记.docx》由会员分享,可在线阅读,更多相关《C#学习笔记.docx(44页珍藏版)》请在冰豆网上搜索。

C#学习笔记.docx

C#学习笔记

C#学习笔记

第一章C#简介

第一节什么是.NETFramework

一、.NETFramework的内容

术语表:

●CTS(CommonTypeSystem,通用类型系统)

●CLR(CommonLanguageRuntime,公共语言运行库)

二、如何用.NETFramework编写应用程序

术语表:

●MSIL(MicrosoftIntermediateLanguage,Microsoft中间语言)

●JIT(Just-In-Time,JIT编译器)

●GAC(GlobalAssemblyCache,全局程序集高速缓存)

第二节什么是C#

一、用C#能编写什么样的应用程序

术语表:

●UI(UserInterface,用户界面)

二、本书中的C#

第三节VisualStudio2005

一、VisualStudio2005Express产品

二、VS解决方案

第四节小结

第二章编写C#程序

第一节VisualStudio2005开发环境

第二节控制台应用程序

一、SolutionExplorer

二、Properties窗口

三、ErrorList窗口

第三节WindowsForms应用程序

第四节小结

第三章变量和表达式

第一节C#的基本语法

C#控制台应用程序的基本结构

第二节变量

一、简单类型

二、变量的命名

命名约定:

●Hungarian记号法

●PascalCase,用于简单的变量

●camelCase,用于高级的命名

三、字面值

用“@”符号逐字地指定字符串

四、变量的声明和赋值

第三节表达式

一、数学运算符

1、运算符的重载

2、两个重要的概念:

●用户输入

●类型转换

二、赋值运算符

三、运算符的优先级

四、命名空间

第四节小结

第五节练习

1、在下面的代码中,如何引用命名空间fabulous中的名称great?

答:

fabulous.great

(super.smashing.great)

2、下面哪些不是合法的变量名?

答:

99Flake、

3、字符串supercalifragilisticexpialidocious是因为太长了而不能放在string变量中吗?

为什么?

答:

不是,string变量赋值需要把字符串置于双引号中

(不是,没有限制)

4、考虑运算符的优先级,列出下述表达式的计算步骤。

答:

resultVar+=(var1*var2)+(var3%var4/var5);

首先计算(var1*var2)和(var3%var4/var5),在(var3%var4/var5)中从左向右依次计算;

然后计算(var1*var2)+(var3%var4/var5)的和;

接着计算resultVar+(var1*var2)+(var3%var4/var5)的和;

最后把resultVar+(var1*var2)+(var3%var4/var5)的值赋给resultVar

(resultVar+=(((var1*var2)+var3)%(var4/var5));)

5、编写一个控制台应用程序,要求用户输入4个int值,并显示它们的乘积。

提示:

可以考虑使用Convert.ToDouble()命令,该命令可以把用户在控制台上输入的数转换为double;从string转换为int的命令是Convert.ToInt32()。

答:

详见具体程序。

第四章流程控制

第一节布尔逻辑

&和|运算符与&&和||运算符的区别

一、位运算符

二、布尔赋值运算符

三、运算符的优先级更新

第二节goto语句

第三节分支

一、三元运算符

?

:

;

二、if语句

1、if语句没有结果,所以不在赋值语句中使用它

2、if语句的结果不能赋予一个变量

3、使用if语句判断更多的条件

三、switch语句

用break、goto或return语句添加断点,可以确保在任何情况下,该结构都有一个有效的执行路径

第四节循环

一、do循环

用最少的代码有条件地格式化文本是“?

:

(三元)运算符”最常见的用法

二、while循环

三、for循环

四、循环的中断

五、无限循环

第五节小结

第六节练习

1、如果两个整数存储在变量var1和var2中,该进行什么样的布尔测试,看看其中的一个(但不是两个)是否大于十?

答:

var1>10&&var2>10

((var1>10)^(var2>10))

2、编写一个应用程序,其中包含联系

(1)中的逻辑,让用户输入两个数字,并显示它们,但拒绝接受两个数字都大于10的情况,并要求用户重新输入。

答:

详见具体程序。

3、下面的代码有什么错误?

答:

第四行,“==”错写成“=”。

4、修改Mandelbrot图像应用程序,要求用户输入图像的边界,显示选中的图像部分。

当前代码输出的字符应正好能放在控制台应用程序的一行上。

考虑如何使每个选中的图像正好占据大小相同的空间,以最大化可视区域。

答:

第五章变量的更多内容

第一节类型转换

一、隐式转换

二、显式转换

表达式的溢出检查环境,要用到两个关键字checked和unchecked,语法:

●Checked(expression);

●Unchecked(expression);

三、使用convert命令进行显式转换

第二节复杂的变量类型

一、枚举

1、定义枚举

EnumtypeName//:

underlyingType指定其他基本类型

{

value1,

value2,

value3,

valueN

}

2、声明这个新类型的变量

typeNamevarName;

3、赋值

varName=typeName.value;

4、把string转换为枚举值的命令

(enumerationType)Enum.Parse(typeof(enumerationType),enumerationValueString);

二、结构

1、定义结构

struct

{

}

声明采用如下形式:

;//可以使用关键字public

2、声明这个新类型的变量

typeNamevarName;

3、通过句点字符访问这个组合变量中的数据成员

varName.member;

三、数组

1、声明数组

[];

初始化数组

●以字面形式指定数组的完整内容

●指定数组的大小,再使用关键字new初始化所有的数组元素

●两种初始化方式的组合,但是数组大小必须与元素个数相匹配;如果使用变量定义其大小,该变量必须是一个常量

2、foreach循环

foreach(in

{

//canuseforeachelement

}

foreach循环对数组内容进行只读访问

3、多维数组

●二维数组声明

[,];

●多维数组声明

[,,,…];

4、数组的数组

[][];

第三节字符串的处理

.ToCharArray();

.ToLower();

.ToUpper();

.Trim();

.TrimStart();

.TrimEnd();

.PadLeft();

.PadRight();

第四节小结

第五节练习

1、下面的转换哪些不是隐式转换?

答:

int转换为short

bool转换为string

2、short类型包含彩虹的颜色,再加上黑色和白色,据此编写color枚举的代码。

这个枚举可以使用byte类型吗?

答:

enumcolor:

short

{

red=1,

orange=2,

yellow=3,

green=4,

blue=5,

Indigo=6,

violet=7,

black=8,

white=9

}

可以

(enumcolor:

short

{

Red,Orange,Yellow,Green,Blue,Indigo,Violet,Black,White

}

可以)

3、修改第4章的Mandelbrot图像生成示例,使用下面的结构表示复杂复杂的数字?

答:

4、下面的代码可以成功编译吗?

如果不能,为什么?

答:

不能,未给数组赋予正确的值。

(不能,没有结束分号;该数组只包含5个元素,无法存储第六个;再给字符串数组元素赋值时没有加双引号)

5、编写一个控制台应用程序,它接收用户输入的一个字符串,将其中的字符以与输入相反的顺序输出。

答:

详见具体程序。

6、编写一个控制台应用程序,它接收一个字符串,用yes替换字符串中所有的no。

答:

详见具体程序。

7、编写一个控制台应用程序,给字符串中的每个单词加上双引号。

答:

详见具体程序。

第六章函数

第一节定义和使用函数

函数定义由以下几部分组成:

●两个关键字

●函数名后跟圆括号

●一个要执行的代码块,放在花括号中

函数名一般采用PascalCasing形式来编写

调用函数:

输入函数名,后跟空括号即可

一、返回值

当函数返回一个值时,可以用下面两种方式修改函数:

●在函数声明中指定返回值的类型,但不使用关键字void

●使用return关键字结束函数的执行,把返回值传送给调用代码

static()

{

return;

}

return语句必须在函数的闭合花括号}之前处理

在用void关键字声明函数时,不能在return关键字和其后的分号之间提供返回值

二、参数

当函数接受参数时,就必须指定下述内容:

●函数在其定义中指定接受的参数列表,以及这些参数的类型

●在每个函数调用中匹配的参数列表

static,…)

{

return;

}

1、参数匹配

要匹配参数的类型、个数和顺序

必须匹配函数的签名

2、参数数组

C#允许为函数指定一个(只能指定一个)特定的参数,这个参数必须是函数定义中的最后一个参数,称为参数数组。

参数数组可以使用个数不定的参数调用函数,它可以使用params关键字来定义

static,…,params[]

{

return;

}

调用格式:

,…,,,…);

3、引用参数和值参数

ref参数:

ref关键字使参数按引用传递。

其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。

若要使用ref参数,则方法定义和调用方法都必须显式使用ref关键字。

例如:

classRefExample

{

staticvoidMethod(refinti)

{

i=44;

}

staticvoidMain()

{

intval=0;

Method(refval);

//valisnow44

}

}

备注属性不是变量,因此不能作为ref参数传递;必须使用初始化过的变量

示例按引用传递值类型(如上所示)是有用的,但是ref对于传递引用类型也是很有用的。

这允许被调用的方法修改该引用所引用的对象,因为引用本身是按引用来传递的。

下面的示例显示出当引用类型作为ref参数传递时,可以更改对象本身。

classRefRefExample

{

staticvoidMethod(refstrings)

{

s="changed";

}

staticvoidMain()

{

stringstr="original";

Method(refstr);

//strisnow"changed"

}

}

4、输出参数

out参数:

●把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数

●另外,在函数使用out参数时,该参数必须是看作还未赋值,即调用代码可以把已赋值的变量用作out参数,存储在该变量中的值会在函数执行时丢失

out关键字会导致参数通过引用来传递。

这与ref关键字类似,不同之处在于ref要求变量必须在传递之前进行初始化。

若要使用out参数,方法定义和调用方法都必须显式使用out关键字。

例如:

classOutExample

{

staticvoidMethod(outinti)

{

i=44;

}

staticvoidMain()

{

intvalue;

Method(outvalue);

//valueisnow44

}

}

尽管作为out参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。

ref和out关键字在运行时的处理方式不同,但在编译时的处理方式相同。

因此,如果一个方法采用ref参数,而另一个方法采用out参数,则无法重载这两个方法。

例如,从编译的角度来看,以下代码中的两个方法是完全相同的,因此将不会编译以下代码:

classCS0663_Example

{

//compilererrorCS0663:

"cannotdefineoverloaded

//methodsthatdifferonlyonrefandout"

publicvoidSampleMethod(outinti){}

publicvoidSampleMethod(refinti){}

}

但是,如果一个方法采用ref或out参数,而另一个方法不采用这两类参数,则可以进行重载,如下所示:

classRefOutOverloadExample

{

publicvoidSampleMethod(inti){}

publicvoidSampleMethod(outinti){}

}

备注属性不是变量,因此不能作为out参数传递。

示例当希望方法返回多个值时,声明out方法很有用。

使用out参数的方法仍然可以将变量用作返回类型(请参见return),但它还可以将一个或多个对象作为out参数返回给调用方法。

此示例使用out在一个方法调用中返回三个变量。

请注意,第三个参数所赋的值为Null。

这样便允许方法有选择地返回值。

classOutReturnExample

{

staticvoidMethod(outinti,outstrings1,outstrings2)

{

i=44;

s1="I'vebeenreturned";

s2=null;

}

staticvoidMain()

{

intvalue;

stringstr1,str2;

Method(outvalue,outstr1,outstr2);

//valueisnow44

//str1isnow"I'vebeenreturned"

//str2is(still)null;

}

}

第二节变量的作用域

局部变量与全局变量

使用static或const来定义全局变量,static允许修改全局变量的值,而const禁止修改;如果局部变量和全局变量同名,全局变量就会被屏蔽

一、其他结构中变量的作用域

“最佳实践”,在声明和初始化所有的变量后,再在代码块中使用它们

二、参数和返回值与全局数据

一般情况下,最好使用参数,而不使用全局数据,但有时使用全局数据更合适

第三节Main()函数

Main函数可以使用四种签名:

●staticvoidMain()

●staticvoidMain(string[]args)

●staticintMain()

●staticintMain(string[]args)

第四节结构函数

关键字不是结构函数所必须的

第五节函数的重载

函数重载允许创建同名的多个函数,这些函数可使用不同的函数类型

第六节委托

委托是一种可以把引用存储为函数的类型,使用delegate关键字

第七节小结

第八节练习

1、下面两个函数都有错误,请指出这些错误。

答:

第一个函数定义的返回值类型是bool,但是函数体没有返回值;第二个函数的参数数组必须定义为参数列表的最后一个参数。

2、编写一个应用程序,该程序使用两个命令行参数,分别把值放在一个字符串和一个整形变量中,然后显示这些值。

答:

详见具体程序。

3、创建一个委托,在请求用户输入时,使用它模拟Console.ReadLine()函数。

答:

delegatestringProcessInput(stringparam);

ProcessInputprocess;

process=newProcessInput(Console.ReadLine());

(classClass1

{

delegatestringReadLineDeglegate();

staticvoidMain(string[]args)

{

ReadLineDelegatereadLine=newReadLineDelegate(Console.ReadLine);

Console.WriteLine(“Typeastring:

”);

stringuserInput=readLine();

Console.WriteLine(“Youtyped:

{0}”,userInput);

}

})

4、修改下面的结构,使之包含一个返回订单总价格的函数。

答:

structorder

{

publicstringitemName;

publicintunitCount;

publicdoubleunitCost;

staticdoubleTotal(intcount,doublecost)

{

doubletotal;

total=count*cost;

returntotal;

}

}

(structorder

{

publicstringitemName;

publicintunitCount;

publicdoubleunitCost;

publicdoubleTotalCost()

{

returnunitCount*unitCost;

}

})

5、在order结构中添加另一个函数,该结构返回一个格式化的字符串,以适合的值替换用尖括号括起来的斜体条目。

答:

structorder

{

publicintunitCount;

publicstringitemName;

publicdoubleunitCost;

publicdoubletotalCost;

staticstringOutputTotal()

{

Console.WriteLine(“OrderInformation:

{0}{1}itemsat${2}each,totalcost${3}”,unitCount,itemName,unitCost,totalCost);

}

}

(tructorder

{

publicstringitemName;

publicintunitCount;

publicdoubleunitCost;

publicdoubleTotalCost()

{

returnunitCount*unitCost;

}

publicstringinfo()

{

return“Orderinformation:

“+unitCount.ToString()+”“+itemName+“itemsat$”+unitCost.ToString()+“each,totalcost$”+TotalCost().ToString();

}

}

第七章调试和错误处理

第一节VisualStudio中的调试

一、非中断(正常)模式下的调试

输出调试信息

●Debug.WriteLine()

●Trace.WriteLine()

两个函数中惟一的字符串参数用于输出消息,而不需要使用{X}语法插入变量值,必须使用+运算符在字符串中插入变量值

usingSystem.Diagnostics;//用于简化函数访问

跟踪下标的方法

在Release模式下没有执行Debug.WriteLine()函数

其它函数:

●Debug.Write()

●Trace.Write()

●Debug.WriteLineIf()

●Trace.WriteLineIf()

●Debug.WriteIf()

●Trace.WriteIf()

1、跟踪点

2、诊断输出与跟踪点

二、中断模式下的调试

1、进入中断模式

断点,是源代码中自动进入中断模式的一个标记,它可以配置为五种方式

进入中断模式的其他方式

●在产生一个未处理的异常时选择进入该模式

●生成一个判定语句时中断,包含两个版本

⏹Debug.Assert()

⏹Trace.Assert()

这两个函数带三个参数(参数的含义)

2、监视变量的内容

3、单步执行代码

4、Immediate和Command窗口

5、CallStack窗口

第二节错误处理

异常

1、try…catch…finally

术语表:

●SEH(StructuredExcept

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1