C#入门笔记(经典)_第1页
C#入门笔记(经典)_第2页
C#入门笔记(经典)_第3页
C#入门笔记(经典)_第4页
C#入门笔记(经典)_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#基础知识.NET/DOTNET:一般指.NETFRAMEWORK框架,一种平台,一种技术C#(sharp):一种编程语言,可以开发基于.NET平台的应用一个解决方案下面可以有多个项目,项目可以包含多个文件,文件中是我们写的程序在文件中,命名空间中可以包含类,类中可以包含方法,方法中是我们写的程序Main方法是我们程序的入口方法:当我们执行程序时候会首先找到Main方法,从Main方法的第一句程序开始执行,当Main方法执行完成后,程序结束。.sln是解决方案的文件,今天写的第一句话:Console.WriteLine("你想写的内容!");第二句话:Console.ReadKey();当程序执行到Console.ReadKey();的时候,程序会停在这里,等待用户从键盘上输入一个键盘,用户输入这个键之后,程序才继续执行。在C#中,每一句话都要一分号结束。#region和#endregion可以折叠一段代码变量:代表着一块内存空间,我们可以通过变量名称向内存存取数据,有变量就不需要我们记忆复杂的内存地址。在学习一句话Console.WriteLine()用于让用户从键盘上输入一句话,当程序执行到下面这句话,就会暂停,然后等待用户从键盘上输入一句话,按下回车继续执行。如果想得到用户输入内容,就需要用户定义一个string类型的变量,写在下面这句话前面接收用户输入的内容。转义字符是一个字符,可以赋值给例如char这样的类型;它有一个\+一个字母来组成具有特殊意义的一个字符;常用的转义字符有:\n换行\b相当于backspace退格\ttab由多个空格组成的一个字符,具有行与行之间的对齐功能,@字在字符串前面表示不转义,其都两种定义1)字符串中如果有\,则不在理解为转义符2)使字符串可以换行3)如果在字符串前面加上@符号,在字符串上用两个双引号代表一个双引号Decimal类型默认的无法转换成double类型注意:赋值运算符/算术运算符在进行运算时,要参与运算的操作数的类型必须相同,并且其运算结束也与操作数的类型相同。在自动转换中,转换是不会丢失精度的。如果一个操作数为double类型,则整个表达式的结果为double类型当需要丢失精度的转换,(如从double3.14转换成int类型),系统不会帮我们完成自动转换,这就需要程序员写代码来完成转换,转换的语法为:(需要转换的数据类型名)待转换的值注意:下面的事例无法完成强制类型转换,因为强制类型转换要求待转换的类型和目标类型必须都为数字。//stringage=(int)Console.ReadLine();//inta=(int)"33";字符串与数值类型之间的转换如下:Console.WriteLine("请输入您的年龄:");strings=Console.ReadLine();intage=Convert.ToInt32(s);C#中异常捕获如何来完成:try{有可能出现错误的代码写在这里//如果上一行代码出错,则直接跳入catch中,本行代码就不会被执行了,如果程序执行到本行代码,,则说明上一行代码没有出错。}catch{出错后的处理}上面的程序如何执行?如果try中的代码没有出错,则程序正常运行try中的内容后,不会执行catch中的内容。如果try中的代码一旦出错,程序立即跳入catch中去执行代码,那么try中的出错代码后面的代码不再执行。intage=18;intsum=age++-10;上面的代码,age是后加,所以在进行语法运算时候,age++取age原值参与运算,所以sum=8;intage=18;intsum=++age-10;上面的代码,age是前加,所以在进行语法运算时候,++age取age原值参与运算,所以sum=9;总之,不管是++age还是age++,经过运算后age的值都进行了+1运算。intage=18;intsum=age++-10;相当于:intage=18;intsum=age-10;age=age+1;intage=18;intsum=age++-10;相当于:intage=18;age=age+1;intsum=age-10;Bool类型只有两个值,一个是true,一个是false。如果关系表达式成立,则这个表达式的值为true,否则为false。逻辑与(&&),逻辑或(||),逻辑非(!):表达式1表达式2逻辑与运算结果truetrueTruetruefalsefalsefalsetrueFalsefalsefalsefalse表达式1表达式2逻辑或运算结果truetrueTruetruefalseTruefalsetrueTruefalsefalsefalseIf结构基本语法:If(条件)语句1;执行过程:(1)首先判断条件的结果,如果条件为true则执行语句1。如果条件的结果为false,则跳过语句,执行后面的语句。注意:if后面括号后面的条件要能计算成一个bool类型的值。(2)默认情况下,if语句只能带1句话,即和if语句有关的语句只有语句。If-else结构:结构:If(条件){语句1;}else{语句2;}执行过程:如果条件为true,则执行if带的语句块1,并跳过else带的语句块2;如果条件为false,则跳过if带的语句块1,执行else带的语句块2.上面两个语句块,根据条件true或false总要执行一个。If-else的嵌套形式://Console.WriteLine("请输入学员的成绩:");//intscore=Convert.ToInt32(Console.ReadLine());//if(score>=90)//{//Console.WriteLine("A");//}//else//{////程序进入这里,说明score肯定是小于90的。//if(score>=80)//这里隐含着score<90//{//Console.WriteLine("B");//}//else//{//if(score>=70)//{//Console.WriteLine("C");//}//else//{//if(score>=60)//{//Console.WriteLine("D");//}//else//{//Console.WriteLine("E");//}//}//}//}特别注意:else永远和离他最近的if配对Switch-case语句:Switch(表达式){Case值1:语句块1;break;Case值2:语句块2;break;Case值3:语句块3;break;Case值4:语句块4;break;Default:语句块5;break;}循环结构:For循环语句:For循环一般用于已知循环次数的循环for(表达式1(定义循环变量或对循环变量赋初值),表达式2(循环条件);表达式3(改变循环变量的值)){ 循环体;}执行过程:计算表达式1,转向第2步计算表达式2,如果表达式2(循环条件),的值为true,转向第三步,如果表达式2的值为false,转向第5步执行循环体执行表达式3,转向第2步循环结束打印矩形的九九乘法表:代码:for(inti=1;i<=9;i++){//外层循环,控制行数,即i代表行号for(intj=1;j<=9;j++){//内层循环,第i行的第j个式子Console.Write("{0}X{1}={2}\t",i,j,(i*j));}Console.WriteLine();}注意:Console.Write("{0}X{1}={2:00}",i,j,(i*j));//{2:00}表明该占位符必须有两位,如果没有两位则在前面补零打印三角形的九九乘法表:代码:for(inti=1;i<=9;i++){for(intj=1;j<=i;j++){Console.Write(i+"*"+j+"="+(j*j)+"\t");}Console.WriteLine();}输入一个数字,求出一下加法表:如:用户输入留则:0+6=61+5=62+4=63+3=64+2=65+1=66+0=6分析:n为用户输入的数字,i=00+n=ni=11+(n-1)=ni=22+(n-2)=n.....i=nn+(n-i)=n代码如下:Console.WriteLine("请输入一个数:");//intnum=Convert.ToInt32(Console.ReadLine());boolisNumber=false;intnum=0;while(isNumber==false){try{num=Convert.ToInt32(Console.ReadLine());isNumber=true;}catch{Console.WriteLine("你刚刚输入的不是数字!");isNumber=false;}}for(inti=0;i<num+1;i++){Console.WriteLine("{0}+{1}={2}",i,(num-i),num);}Break:可以用于switch-case判断中,用于跳出switch用在循环中,用于立即跳出(终止)循环注意:用于循环中时候,跳出的是break所在的循环。continue:用于循环中,程序一旦执行到continu语句,则立即结束本次循环(就是不再执行循环体中continue下面的语句)。(do-while、while循环直接进行下一次循环条件判断,如果条件成立,则再次进入循环;for循环,则先执行表达式3再判断循环条件是否成立。)三元运算符:表达式1?表达式2:表达式3;执行过程:首先计算表达式1的值(表达式1的值为一个bool类型的值),如果表达式1的值为true,则表达式2的值为整个表达式的值,如果表达式1的值为false,则表达式3的值为整个表达式的值。注意:表达式2和表达式3的数据类型要相同或相容。常量:语法:const类型常量名=常量值;在定义时候赋值,在其他地方不允许赋值(不允许改变变量的值)枚举类型(enum):让我们定义一种类型,并且在定义这种类型时候制定这个类型的所有的值。语法:enum自己起的类型名称{值1,值2,….值n};枚举定义一般和类定义在同一个级别,这样在同一个命名空间下的所有类就都可以使用这个枚举了。(方法中、类中也可以)作用:限制用户不能随意赋值,只能在定义枚举时列举的值中选择不需要死记每一个值是什么,只需要选择相应的值注意:定义枚举时候,值不能是int类型枚举类型都可以强制转换成一个int类型枚举在定义的时候是有一个默认编号的编号从0开始如何把一个字符串转换成枚举类型:(自己定义的枚举类型)(Enum.Parse(typeof(自己定义的枚举类型),“待转换的字符串”));结构体:为什要用结构体?比如我们上课讲的为了存储一个人的信息,要声明一组变量。当我们要存储n个人的信息的时候,就要声明n组变量,这样比较麻烦。存储一个人信息的这几个变量间没有关系,容易记乱。语法结构:访问修饰符struct结构名{ 定义结构成员;}注意:定义好一个结构后,就直接可以声明相应的变量了。声明好变量后通过变量名.成员名来访问结构的成员数组:可以帮我们一次声明多个同类型的变量。这些变量在内存中是联系存储的。数组声明语法:数据类型[]数组名=new数据类型[数组长度];例如:int[]score=newint[5];就声明了一个长度为5的数组,数组名字叫score通俗的说就是:声明了一个数组,里面包含5个int类型的变量,数组名叫score。里面5个int类型的变量叫做数组元素。Score01234如何访问数组?通过下标(索引)来访问数组比如我们要向第一个元素赋一个3,可以这样写:数组名[编号]Int类型的数组一旦被声明后,里面的每一个元素被初始化为零,0通过数组名.length可以获得数组的长度Console.Clear();清屏数组之间的交换问题:5个元素时候6个元素时候0-40-51-31-422-3N个元素交换共需要交换N/2次规律:两个下标相加后等于数组长度减去一在一个循环中,第i个元素与第length-1-i个元素进行交换冒泡排序法:让数组中的元素两两比较(第i个与第i+1个比较),经过n(i-1)遍两两比较,数组能按照预期的规律排序。要从大到小排序,我们进行两两比较的时候用小于号,如果成立则交换、如果不成立则不交换。10,20,30,40,50,60,70原始数据20,30,40,50,60,70,10第1趟比较了6次30,40,50,60,70,20,10第2趟比较了5次40,50,60,70,30,20,10第3趟比较了4次50,60,70,40,30,20,10第4趟比较了3次60,70,50,40,30,20,10第5趟比较了2次70,60,50,40,30,20,10第6趟比较了1次也就是说n个数需要排n-1趟;第t趟比较的次数为n-t次i=0第一趟i=1第二趟趟数:t=i+1for(intj=0;j<n-(i+1);j++)对照for(intj=0;i<10;i++)如果以上实在是理解不了,则请记下一下公式:for(inti=0;i<number.length-1;i++){ for(intj=0;j<number.length-1-i;j++) { If() { //如果从大到小就用小于号,如果从小到达就用大于号 交换元素; }}}什么是方法?方法即是函数,函数即是方法。所谓的方法就是将一堆代码进行重用的一种机制。用来复用代码的,当我们在一个程序中反复写了同样的代码,那一般情况下,我们可以把需要重复写的代码,定义在一个方法中,用的时候只需要调用这个方法就行了。举个很形象的例子:我们可以讲榨汁作为一个方法,如果你啥都不给他他能炸出东西吗?--当然不可以。因此我们需要给她例如苹果、橙子等水果,这样他才能相应的炸出苹果汁和橙子汁。那么所给的苹果和橙子我们就称他们为参数;而炸出的苹果汁和橙子汁我们可以把他们理解为返回值。这下理解了吗?方法的语法:[访问修饰符][static]返回值类型方法名([参数]){ 方法体;}[]我们所看到想这样的中括号代表中括号中的内容可以写可以不写注意:一般情况下,方法一般要定义在类中。如果方法没有返回值则返回值的类型写void表示方法无返回值如果方法没有参数,()不可以省略方法的命名规则:方法名开头大写,参数名开头小写,参数名变量名要有意义注意:方法后面必须有括号方法的调用:如果是静态方法(由static修饰的),则使用类名.方法名();在类中调用本类的方法,可以只写方法名();return语句:立即退出方法reflect软件(反编译软件)。前提:用.NET编写变量的作用域:在方法中定义的变量称为局部变量,其作用域从定义开始到其所在大括号结束为止。当被调用者想得到调用者方法中的变量时,则可以让调用者通过参数的形式给被调用者。[访问修饰符][static]返回值类型方法名([参数]){ 方法体;}如:publicstaticvoidTest(intnumber)//形式参数{//a=a+5;}在方法名后面的括号内定义变量,叫作定义这个方法的参数,这里定义的变量用于接收调用者传过来的数据。注意:如果一个方法一旦有参数,那么调用者就必须传参数,并且传参数的个数与对应位置上的类型必须一致。当调用者想访问我们方法中的变量时候可以通过返回值返回:例如:strings=Console.ReadLine();inti=Convert.ToInt32(“22”为什么方法前面能够定义一个变量能够收到方法的值,是因为在方法中使用了返回值。只要在方法中返回了值,那么在调用方法时候前面就应该用一个变量来接收方法的返回值。注意:个方法只能有一个返回值一旦一个方法有返回值,那么在这个方法体中就必须通过return语句返回一个值,并且这个值要与返回值类型是相同的。语法:return值;一个变量一旦定义在方法外类的里面,就叫做类的字段。这个变量就可以被本类的所有方法访问,但是要注意静态方法只能访问静态字段。字段是什么意思呢?就是说,你想让一个变量,在我这个类中的所有方法都可以访问到的时候,又不想传参数,那么,你就可以把这个变量定义成字段。注意:由const修饰的常量不能定义为static,方法不论是否是静态的都可以访问常量。什么叫方法的重载?一般来说,在同一个类中,方法名相同,并且方法的参数的个数不同,或者对应位置上的类型不同,才能构成方法的重载。反过来说,只要你参数的类型相同,并且参数的个数也相同,就构不成重载。例如:publicstaticdoubleMax(doublei1,doublei2){if(i1>i2){returni1;}else{returni2;}}publicstaticintMax(inti1,inti2){if(i1>i2){returni1;}else{returni2;}}注意:方法的重载和返回值没有关系。方法的重载只看参数,不看返回值思考:方法只能返回一个值,当需要返回多个值的时候怎么办?out则是内部为外部变量赋值,out一般用在函数需要有多个返回值的场所。例如:staticvoidMain(string[]args){intnumber=10;intresult=Test(outnumber);Console.WriteLine(result);Console.WriteLine(number);Console.ReadKey();}staticintTest(outinta){a=20;returna;}里面的:number不是作为参数传给a,而是表示number与a建立一种联系。对a赋值就相当于对number进行赋值这样的话通过a也可以把number传出去。因此必须要对a赋值。如上代码:在方法的参数类型前加out,那么传参数的时候也必须在number前面加out表明这个参数不是传入的而是用来传出值的。如果参数是以out形式传入的,那么在传入前可以不赋初值在方法中,对于由out修饰的参数必须要赋值,并且必须在使用前赋值。案例演示:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceEx19{classProgram{staticvoidMain(string[]args){////intnumber=10;////intresult=Test(outnumber);////Console.WriteLine(result);////Console.WriteLine(number);//strings="123aaa";//intre;////intresult=int.Parse(s);////int.TryParse(s,outre);//if(int.TryParse(s,outre)==true)//{//Console.WriteLine("能转换成功!转换后的数为:"+re);//}//else//{//Console.WriteLine("转换失败!");//}//strings="123";//intre;//if(int.TryParse(s,outre))//{//Console.WriteLine("能转换成功!转换后的数为:"+re);//}//else//{//Console.WriteLine("转换失败!");//}int[]num={3,4,2,5,1,6};intmax,min,sum;sum=Cacular(num,outmax,outmin);Console.WriteLine("数组的和为:{0}最大值为:{1}最小值为:{2}",sum,max,min);Console.ReadKey();}///<summary>//////</summary>///<paramname="max">最大值<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论