C#学习笔记Word文档下载推荐.docx
- 文档编号:17909497
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:44
- 大小:65.54KB
C#学习笔记Word文档下载推荐.docx
《C#学习笔记Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C#学习笔记Word文档下载推荐.docx(44页珍藏版)》请在冰豆网上搜索。
●类型转换
二、赋值运算符
三、运算符的优先级
四、命名空间
第五节练习
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语句
第三节分支
一、三元运算符
<
test>
?
resultIfTrue>
:
resultIfFalse>
;
二、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<
typeName>
<
memberDeclarations>
声明采用如下形式:
accessibility>
type>
name>
//<
可以使用关键字public
3、通过句点字符访问这个组合变量中的数据成员
varName.member;
三、数组
1、声明数组
baseType>
[]<
初始化数组
●以字面形式指定数组的完整内容
●指定数组的大小,再使用关键字new初始化所有的数组元素
●两种初始化方式的组合,但是数组大小必须与元素个数相匹配;
如果使用变量定义其大小,该变量必须是一个常量
2、foreach循环
foreach(<
in<
array>
//canuse<
foreachelement
foreach循环对数组内容进行只读访问
3、多维数组
●二维数组声明
[,]<
●多维数组声明
[,,,…]<
4、数组的数组
[][]<
第三节字符串的处理
●<
string>
.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:
Red,Orange,Yellow,Green,Blue,Indigo,Violet,Black,White
可以)
3、修改第4章的Mandelbrot图像生成示例,使用下面的结构表示复杂复杂的数字?
4、下面的代码可以成功编译吗?
如果不能,为什么?
不能,未给数组赋予正确的值。
(不能,没有结束分号;
该数组只包含5个元素,无法存储第六个;
再给字符串数组元素赋值时没有加双引号)
5、编写一个控制台应用程序,它接收用户输入的一个字符串,将其中的字符以与输入相反的顺序输出。
6、编写一个控制台应用程序,它接收一个字符串,用yes替换字符串中所有的no。
7、编写一个控制台应用程序,给字符串中的每个单词加上双引号。
第六章函数
第一节定义和使用函数
函数定义由以下几部分组成:
●两个关键字
●函数名后跟圆括号
●一个要执行的代码块,放在花括号中
函数名一般采用PascalCasing形式来编写
调用函数:
输入函数名,后跟空括号即可
一、返回值
当函数返回一个值时,可以用下面两种方式修改函数:
●在函数声明中指定返回值的类型,但不使用关键字void
●使用return关键字结束函数的执行,把返回值传送给调用代码
static<
returnType>
functionName>
()
return<
returnValue>
return语句必须在函数的闭合花括号}之前处理
在用void关键字声明函数时,不能在return关键字和其后的分号之间提供返回值
二、参数
当函数接受参数时,就必须指定下述内容:
●函数在其定义中指定接受的参数列表,以及这些参数的类型
●在每个函数调用中匹配的参数列表
(<
paramType>
paramName>
…)
1、参数匹配
要匹配参数的类型、个数和顺序
必须匹配函数的签名
2、参数数组
C#允许为函数指定一个(只能指定一个)特定的参数,这个参数必须是函数定义中的最后一个参数,称为参数数组。
参数数组可以使用个数不定的参数调用函数,它可以使用params关键字来定义
p1Type>
p1Name>
…,params<
调用格式:
p1>
…,<
val1>
<
val2>
…);
3、引用参数和值参数
ref参数:
ref关键字使参数按引用传递。
其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
若要使用ref参数,则方法定义和调用方法都必须显式使用ref关键字。
例如:
classRefExample
staticvoidMethod(refinti)
i=44;
staticvoidMain()
intval=0;
Method(refval);
//valisnow44
备注属性不是变量,因此不能作为ref参数传递;
必须使用初始化过的变量
示例按引用传递值类型(如上所示)是有用的,但是ref对于传递引用类型也是很有用的。
这允许被调用的方法修改该引用所引用的对象,因为引用本身是按引用来传递的。
下面的示例显示出当引用类型作为ref参数传递时,可以更改对象本身。
classRefRefExample
staticvoidMethod(refstrings)
s="
changed"
stringstr="
original"
Method(refstr);
//strisnow"
4、输出参数
out参数:
●把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数
●另外,在函数使用out参数时,该参数必须是看作还未赋值,即调用代码可以把已赋值的变量用作out参数,存储在该变量中的值会在函数执行时丢失
out关键字会导致参数通过引用来传递。
这与ref关键字类似,不同之处在于ref要求变量必须在传递之前进行初始化。
若要使用out参数,方法定义和调用方法都必须显式使用out关键字。
classOutExample
staticvoidMethod(outinti)
intvalue;
Method(outvalue);
//valueisnow44
尽管作为out参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。
ref和out关键字在运行时的处理方式不同,但在编译时的处理方式相同。
因此,如果一个方法采用ref参数,而另一个方法采用out参数,则无法重载这两个方法。
例如,从编译的角度来看,以下代码中的两个方法是完全相同的,因此将不会编译以下代码:
classCS0663_Example
//compilererrorCS0663:
"
cannotdefineoverloaded
//methodsthatdifferonlyonrefandout"
publicvoidSampleMethod(outinti){}
publicvoidSampleMethod(refinti){}
但是,如果一个方法采用ref或out参数,而另一个方法不采用这两类参数,则可以进行重载,如下所示:
classRefOutOverloadExample
publicvoidSampleMethod(inti){}
备注属性不是变量,因此不能作为out参数传递。
示例当希望方法返回多个值时,声明out方法很有用。
使用out参数的方法仍然可以将变量用作返回类型(请参见return),但它还可以将一个或多个对象作为out参数返回给调用方法。
此示例使用out在一个方法调用中返回三个变量。
请注意,第三个参数所赋的值为Null。
这样便允许方法有选择地返回值。
classOutReturnExample
staticvoidMethod(outinti,outstrings1,outstrings2)
s1="
I'
vebeenreturned"
s2=null;
stringstr1,str2;
Method(outvalue,outstr1,outstr2);
//str1isnow"
//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结构中添加另一个函数,该结构返回一个格式化的字符串,以适合的值替换用尖括号括起来的斜体条目。
publicdoubletotalCost;
staticstringOutputTotal()
Console.WriteLine(“OrderInformation:
{0}{1}itemsat${2}each,totalcost${3}”,unitCount,itemName,unitCost,totalCost);
}
(tructorder
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 学习 笔记