



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.命名规范:Pascal风格:多个英文单词时,每个英语单词的首字母要大写(2)Came!风格:包含一个或者多个单词时,每个英语单词首字母要小写参数和变量使用Camel风格,其他都用Pascal风格.控制台应用程序:类似DOS窗ロ那样,以console命令方式运行的程序Console.writeline("XJTloveMH");〃输出:XJTloveMHConsole.readyok();〃暂停运行结果,按任意键结束。.Windows窗体应用程序:各种客户端程序,有很好的人机交互界面,基于C/S架构的程序二.数据类型值类型引用类型指针类型
2.1值类型:(1)整数类型有符号 sbyte short int long无符号 byte ushort uint ulong左ーー》右可以转换(小ーー》大转换)左ーー》右可以转换(小ーー》大转换)故据美《含义sbyte有符号8位幡数-128-1Z7(-27-2し1>byg斯号布曲0-2bb(0-2*-1)short有符号16位整效-3276R-327671-2ぬ-2,6-1)ushort无符号16位整数〇-66636(0-2,"-1)int有杵号32位®Htt-2147483648-21474H3647(-231-2a,-l)umt无な号32位脈数〇-4HM96729シ0-2®-l)long有杆号64位修数―922337203686477b806-922337203685477b807(-2®-2®-))ulong无带对M位餞數0-18446744073709561615(0-2W-1)(2)浮点数类型(带小数部分的数值)单精度(float)浮点类型双精度(double)浮点类型若对于浮点数没有进行任何明确的声明,默认是double类型.要是强制将其制定为float类型,要在后面加上字符"F"或"f"(3)秒理(char)字符串类型(string)字符常量是用单引号括起来ー个字符.将字符放在双引号里,编译器会把它看做字符串.转义字符:除了以上形式的字符常・外,Ct还允许使用ー种特殊形式的字符常量,即以•ぐ开头的字符序列,它们一般用来实现一定的控制功能,并没有一定的字型.这种非星示字符建以用一般形式的字符表示.故规定用这种特殊的形式来表示.这种形式的字符也称为"转义字符”。在C*中.转义字符及其含义如下表所示。M义内含义转义忖會义ヾ单引号取消(Esc)、“55MI号换货 N KM0: । \nS〇空字符\r屈军\a如号(Alert)\t水平制表符Vb退临(Barkffpaoo)\v兩直制表符(4)decimal类型(十进制decimal类型)为了适应高精度的财务和货币计算的需求ふ#提供了十进制decima!类型.要把数字定义为decima!类型,而不是double或float或者整数类型,可以在数字后加字符"M"或"m".(5)布尔类型(bool),用来表示"真"或者"假"的逻辑数据类型.只有2种取值,真(true)或者假(false).例子:计算圆的面积usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespacecircle(classProgram(staticvoidMain(string[]args)(decimalpi=3.14159m;intr=12;decimals=0;s=pi*r*r;Console.WriteLine("圆的半径是:={0}\n圆的面积是:={1}\r,s);//{0}和{1}是占位符,将r和s的结果显示在{0}和{1}的位置显示Console.ReadKey();〃控制台暂停符合,暂停运行结果Console.ReadLineQ;2.2弓I用类型:(用来描述结构复杂,抽象能力比较强的数据。与值类型是相并列的.)同为引用型的2个变量可以指向同一个对象,也可以针对同一个变量产生作用,或被其他同类型的变量所影响。字符串,类,接口,委托,数组都是引用型变量。(1)字符串:(由放在ー对双引号中的多个字符组成的ー个串。)看做字符组成的数组。使用string来声明字符串变量。数据类型之间的转换:隐式转换:(1)数值类型之间的隐式转换小到大可以转换,转换可能导致精度丢失,但不影响数量级。不能大到小转换。(2)var类型数据隐式转换:Var定义的变量的数据类型由赋值的数据决定。Eg:varname="XJT",这时候name就是字符串类型,隐式转换。Varname=250,这时候name就是int类型,逬行了隐式转换。显示转换:(强制类型转换)要用户明确指定转换的类型。
.NetFramework提供了很多类阵,其中System.Convert类就是专门进行类型转换的类,通过Convert类提供的方法可以实现各种あ本数据类型间的转换。Convert类的常用方法如下表所示"方伏说明ToBoolean格指定的值转换为等效的布尔依ToChar梅指足的值物|»为Ummdn字符ToDateTinw将指定的值紘横为DateTimeTnDet^mal将指定值箝擾为Decimal数字ToDouble将指定的值转换为双情度浮点数ToIntW的指定的假转検为16位有符号整数ToLnt32將指定的伯特换为32位有符号整数ToStrina絢指定他转换为H等效的Siring表示冊式c.使用c.使用convert类来转换:(是一种隐式转换)D. 数值和字符串之间的转换:(1)ToString()方法:数值类型的ToString()方法可以将数值型数据转换为字符串。==========变量名.ToString()==========eg: intn=10;stringm=n.ToString();〃变量名.ToString(),这个变量名哟和前面声明的变量名保持一致(2)Parse()方法:数值类型的的Parse()方法可以将字符串转换为数值型.=========数值类型.parse(变量名)==========eg: stringm="XJT";Intnint.Parse(m); 〃数值类型.parse(变量名),这个数值类型要Intn和新声明的变量类型保持一致.转换的例子:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespacecharge{classProgram{staticvoidMain(string[]args)(doublei=3.1415926;ints=(int)i;〃强制将double型的i转换为int型的sdoublesi=Convert.ToInt32(s);〃整型s隐式转换为double型的sistringm="123456789";intn=int.Parse(m);〃字符串m,转换为int型数值ninta=1000;stringb=a.ToString();〃int型a,转换为字符串bConsole.WriteLine(sl);Console.WriteLine(n);Console.WriteLine(b);//MessageBox.Show(sl.ToString());//MessageBox.Show输出的是一个text的字符串,所以要讲int型的si转换为字符串Console.ReadKeyO;〃转换时,小一》大ok不能大一》小E.装箱和拆箱:(数据转换类型的ー种特许应用)装箱是将"值〃类型转换成〃引用〃类型(数值ー…》字符串是其ー种表现)拆箱是将"引用"类型转换成〃值〃类型。(字符串…一》数值是其一种表现)封箱和拆箱的例子:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespace_3.khlx|classProgram(staticvoidMain(string[]args)(intx=100;objectobj=x;Console.WriteLine("x的初始值为{〇},装箱后的值为{l}”,x,obj.ToString());〃封箱:将数值转换为字符串inty=(int)obj;Console.WriteLine("弓I用类型的值为{0}拆箱后的值为{l}",obj.ToString(),y);〃拆箱:将字符串转换为数值。Console.ReadKeyO;值类型变量和引用类型变量的使用区别:值类型变量不需要用new关键字类分配内存,定义完就可以直接使用,引用类型变量则需要为其赋值后,才能使用。值类型变量,在定义后就完成了内存的分配,引用类型,在定义后,没有为其分配内存,必须显式用new关键字来为其分配内存.三.变量和常量3.1变量在程序执行过程中,不段变化的量值1)变量的命名:变量名必须以"字母或下划线"开头,只能由字母、数字、和下划线组成.变量名不能包含空格、标点符号、运算符字符。变量名不能与C#中的关键字、运算符或函数名同名。使用多个单词组成变量名时,使用骆驼命名法(camelCase),即第一个单词的首字母〃写,其他单词的首字母大写。2)变量的声明和赋值变量的声明语法如下:{访问修饰符}{变量修饰符}变量的数据类型变量名表;访问修饰符和变量修饰符可以省略。Privateintx=10;Intx=3,y=4;3)隐式类型的局部变量(匿名变量)使用关键字var来声明,可以用var来声明任何类型的局部变量,它只负责告诉编译器,该变量需要根据初始化表达式来推断变量类型,而且只能是局部变量。隐式类型的局部变量的语法如下:Var变量名称=变量值;Vari=8;//定义局部变量i;i作为整数型数据被编译。3.2常・:程序运行过程中,值不发送改变的变量常量的声明语法如下:[访问修饰符]const类型常量表达式;Constintmonth=12;(1)变量前加const关键字,就可以将该变量声明为常量。(2)变量实际上代表的是数据真实的存储位置,变量的类型决定了它的存储的数值。先给变量声明类型后才能赋值。4.1运算符:四.运算符与表达式表示各种不同运算的符号。类型运算符说明比较运算符>比较ー个救是否大于另ー个数(結果是遭辑<比M 二,:•,一的( SDTtu©或F'alflo))■比较ーNft是否大F等于耳ー个傲<■比较ー个数是否小于等干另一公效比较兩个恒是否不等■N比较两个值是否相等产生两个榻作数的按位与1产生两个操作数旳按位或递银运(!裕A产生两个操作数的按位牌或&&布尔”与“两个操作败都为真时结果为其余情况结果为“trII布尔"T两个爆作8(至少ー个为-w时站嫩为“真、耳余情况略案为-«•] 防・ザ 3mz自加运算符:前置自加:x=++y;计算过程是y=y+l;x=y;后置自加:X=y++;计算过程是x=y;y=y+l;前置自减:x=y-;计算过程是y=y-l;x=y;后置自减:X=y-:计算过程是x=y;y=y-l;其他运算符:(1)条件运算符结构:(操作数1?操作数2,操作数3)如果操作数1是真,输出操作数2,如果操作数1是假,输出操作数3(2)()运算符用于指定操作数中的运算顺序和指定强制转换或类型转换。(3)点运算符点运算符(.)用于访问数据结构的成员。结构: 数据结构.成员(4)索引运算符索引运算符([])用于数组、索引器和属性,也可用于指针。new运算符new运算符用于创建一个新的类型实例,有3种形式:a.对象创建表达式,用于创建一个类类型或值类型实例b,数组创建表达式,用于创建一个数组类型实例c.代表创建表达式,用于创建一个新的代表类型实例typeof运算符用于获取系统原型对象的类型,也就是Type类型•Type类包含关于值类型和引用类型的信息。)checked和unchecked运算符用于检测指定的运算,并指出相应的错误信息。
运算符的优先级表达式:用运算符把操作数连接起来的式子。操作数包括文本、变量、常量和表达式等五.程序的基本结构5.!顺序结构:每一条语句都要执行并且只执行ー次,语句的执行先后次序和语句在顺序结构中出现的先后次序一致.程序代码中最基本的结构,逐条执行程序中的每一天语句,从程序开始执行到程序结束为止。5.2分支结构:程序设计过程中,经常要根据条件逬行判断,选择要执行的语句序列。分支结构:根据条件的不同,选择执行程序中的不同分支,每个分支对应一个语句序列。(1)条件语句对条件进行判断,根据判断结构选择执行不同的分支。有if语句、If...else语句和switch语句。单分支结构语句:只有if语句的分支结构双分支结构语句:If...else语句的分支结构多分支结构:含有多个if...else语句的分支结构(2)switch语句Switch(表达式)(Case常量表达式1:语句序列1;break;Case常量表达式2:语句序列2;break;Case常量表达式n:语句序列n;break;Default:语句序列n+1;Break;Switch分支结构多用于常量比较少的情况。循环结构:在程序开发中,经常要反复执行某段代码,为了避免重复输入相同代码,同时提高程序代码得可读性,引入了循环结构,需要反复执行的代码称为循环体。循环结构使用循环条件控制循环体代码得执行与否,循环条件中通常使用ー个特殊的变量,循环变量。C#提供的循环语句有:for语句,while语句,dowhile语句和foreach语句。for循环for(表达式1;表达式2;表达式3){循环体))while循环While(表达式)(循环体}do-while循环do{循环体}while(表达式)(4)foreach循环foreach循环用于遍历整个集合或数组,可以获取集合中的所有对象,不需要给出循环变量和循环条件,也不需要给循环变量赋初值和修改循环变量的值。foreach(数据类型局部变量in集合或者数组)(循环体循环嵌套(循环嵌套就是在循环体中还可以使用循环语句。)循环嵌套需要区分外层循环和内层循环,外层循环执行一次,内层循环执行ー遍。外层循环和内层循环的循环控制要互相独立。外层循环和内层循环要定义2个不同的循环变量。如果循环结构在for语句中定义循环变量,该变量被视为局部变量,循环结构结束后,变量就被释放,循环语句外再引用这个循环变量就会出错。搆述R他用户可处理的肄窗的片本更ー个空参数传递蛤方法.该方法不能根殳该参数出现箕术上必蹴者ド港嬖数格式据限腼索/超出试图使用ー个未分配的引用搆述R他用户可处理的肄窗的片本更ー个空参数传递蛤方法.该方法不能根殳该参数出现箕术上必蹴者ド港嬖数格式据限腼索/超出试图使用ー个未分配的引用六.异常处理与程序调试C#错误类型:(1)语法错误:代码不符合C#语言的语句。(2)运行错误:异常。(3)逻辑错误:没有实现编程人员的设计意图和功能。异常处理概述:异常:程序执行时遇到的错误情况或意外行为。异常处理:编程人员在程序编写过程中对可能发生的错误和异常预先采取的处理措施。常见的异常类有:Exception类SystemBIxcAptionArgumentExreptfnnAigumentNullExceptionAiQumentOutOtRanaHKxr»pU(MiAiithmeticExcepUonDivIdeByZoroExceptionFormatExcoptionIndAxOutOfRnngeExrepuonNullRefernnceExceptionOtitOfMemeryExceptinnStackOverflowException 堆松色出try-catch语句是C#提供的异常处理语句,语法如下:try(可能出现异常的语句序列;)Catch(异常类型 异常对象)(对可能出现的异常进行处理;)try-catch-finally语句,语法如下:try(可能出现异常的语句序列;)Catch(异常类型 异常对象){对可能出现的异常进行处理;)finally最后要执行的代码,进行必要的清理操作,以释放资源)throw语句在try-catch和try-catch-finally语句中的try块中,除了系统自动抛出异常外,也可以使用throw语句抛出异常;throw语句既可以引发系统异常,也可以引发自定义异常。throw异常对象自定义异常类:如果系统提供的异常类不能够与程序中的异常相匹配,就需要自定义异常类。自定义异常类的语法如下:Class自定义异常类名:异常基类名{/Z语句块)6.4程序调试:ネ呈序调试的主要目的是解决程序中的逻辑错误,通过设置断点,跟踪观察程序的执行过程,发现造成逻辑错误的具体语句,然后修改程序实现设计目标。设置断点:(1)鼠标左键单击代码窗口最左边灰色区域对应语句行的位置添加断点,再次单击删除断点,左侧的红色圆点即为断点(2)鼠标左键单击语句所在行,然后按F9来添加断点,再次按F9删除断点(3)鼠标左键单击语句所在行,然后右键单击,在弹出的快捷菜单中选择【断点】ー-ー》插入断点。启动、继续和停止调试选择菜单【调试】ー-ー》启动调试或按F5键启动调试,或单击工具栏的启动按钮,启动调试.启动调试后,可以选择菜单【调试】一ー》【停止调试】来停止调试。单步调试启动调试后,可以在菜单中选择【调试】ー一》【逐语句】或者【调试】一ー》【逐过程】进行逐语句或逐过程调试.===》逐句调试相当于为程序中的每个语句都加上一个断点,每次执行一条语句.===》ネ呈序执行到被调用函数内部,需要停止逐语句调试时,可以选择【调试】一ー》【跳出】,程序将返回到调用函数。调试離Visualstudio提供了局部变量窗口、监视窗口、自动窗口和快速监视窗口等对程序的运行进行监控。(1)局部变量窗口(2)自动窗口(3)监视窗口(4)快速监视窗口七.常用数据类型的用法字符串(C#中,字符串常用于C#重新的输入、输出,文件读、写操作)A.创建字符串:String字符串变量名;Stringstr="XJT”;(1)在定义字符串变量的同时赋值Stringstr="XJT”;(2)将一个字符串赋值给另外一个字符串:stringa=str+-123";(3)使用创建string对象的方式,创建包含指定个数给定字符的字符串。Stringa=newstring('a',5);/Z创建了一个字符串stringa="aaaaa";B.字符串基本操作:(1)字符串判等a.字符串变量1.Equals(字符串2);其中字符串2可以是变量也可以是常量。字符串变量1调用成员函数Equals(),比较字符串变量1对应的字符串与字符串2是否相等,相等返回True,不相等返回False.b.String.Equals(字符串1;字符串2);Eg:stringa="XJT";Stringb=s;Console.WriteLine(a.Equals(b));//===》string.Equals(a,b);(2)字符串的比较a,字符串变量.CompareTo(字符串2);b.Spare(字符串1,字符串2);字符串比较方式:找到2个字符串中第一个不相同的字符,该字符ASCII码值小的字符串小。若字符串变量小于字符串2返回ー1(字符串变量小于字符串2相等返回〇,字符串变量小于字符串2大于返回1.(3)判断字符串变量是否包含指定字符或字符串a.字符串变量.Contains(字符1);b.字符串变量.Contains(字符串2);(4)査找字符串变量中指定字符或字符串出现的位置a.字符串变量.IndexOf(字符1);b.字符串变量.IndexOf字符串2);返回要查找的字符或者字符串首字母在字符串中的位置数值。(5)取子串a.字符串变量SubString(起始位置,字符串长度);〃取给定长度子字符串b.字符串变量SubString(起始位置);〃取到字符串结尾(6)插入子串a,字符串变量.Insert(起始位置,子字符串2);ー个字符串起始位置是0.(7)删除子串字符串变量Remove(起始位置,子串长度);字符串变量Remove(起始位置);不指定子字符串串长度就取值到字符串变量结尾。(8)替换子串字符串变量.Replace(字符串1,字符串2);〃字符串2替换字符串1(9)去除字符串空格字符串变量.Trim();除去字符串头部和尾部的空格。C.StringBuilder类String类是引用类型,每次改变string类对象的值,(修改字符串变量对应的字符串),都需要再内存里为新字符串重新分配空间。会导致内存开销大,所以引入StringBuilder类。7.2数组.ー维数组:理解为ー个表格,ー维数组就是ー个一行多列的表格。数组中的数据称为数组兀素。数组不能直接使用,要先对数组进行初始化。初始化就是指出数组中元素的个数,为数组分配内存空间,也可以同时为数组元素赋值。a,数据类型口数组名=new数据类型[数组元素个数]{数组元素列表};b,数组名=new数据类型[数组元素个数];Int[]a=newint[5]{123,4,5};a=newint[5]{1,2,3,4,5);数组包含多个数组元素,为了区分数组的不同元素,使用"数组名[下标]"的方式访问数组元素.C#中提供了一个属性Length,来表示数组的长度,也就是数组中元素的个数。.二维数组:ー维数组就是ー个一行多列的表格,二维数组可以看作多行多列的表格。二维数组语法格式:数组类型い数组名=new数据类型[行数,列数]{数组元素列表};数组类型い数组名=new数据类型[行数,列数];.数组的基本操作:(1)数组排序和反转Array类的静态方法Sort()可以实现数组的排序,无返回值。Array.S。口数组名);〃升Array.Reverse徵组名);〃降(2)査找数组元素Array类的静态方法IndexOf()可以判断数组是否包含与给定值相等的元素,是返回对应数组元素的下标,否则返回ー1.Array.IndexOf做组名,要查找的值);(3)数组元素求和、最大值、最小值、平均值:C・扌悬共了方法sum()、Max().Min()、Average()ヌ物组元素进行统计。数组名.sum();(4)数组字符串相互转化:String类的静态方法Join()可以将数组中所有元素连接起来,生成ー个字符串,返回值为该字符串。String.join(分隔符,数组名);String类的方法Split();可以根据分隔符将字符串切分为多个部分,每个部分作为ー个数组元素生成一个字符串数组,返回值为该字符串数组。字符串变量.Split(分隔符);(5)在字符串中査找、删除字符数组元素:String类方法IndexOfAnyO;在字符串中査找给定字符数组中的所有元素,返回字符数组元素在字符串中首次出现的位置值,査找失败则返回一L字符串变量.IndexOfAny(字符数组名);String类方法LastlndexOfAnyO;在字符串中査找给定字符数组中所有元素,返回字符数组元素在字符串中最后出现的位置值,査找失败则返回ー1。字符串变量.LastlndexOfAny(字符数组名);且是C#中重要的数据类型,可以作为参数传递给某个方法。枚举类型用于声明一组命名常数。语法格式:enum枚举类型名{枚举成员列表}Enumweek={星期一,星期二,星期三,星期四,星期五,星期六,星期天};枚举类型定义在类定义之外。八,主流软件开发方法:面向对象面向对象的编程思想面向对象编程:booch对对象的描述:对象具有状态、行为和标识。这意味着每ー个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),并且每ー个对象都可以唯一地与其他对象区分开来,具体说来,就是每ー个对象在内存中都有一个唯一地址。从特许到ー般:C#中的类面向对象程序设计的基础是类和对象。类是面向对象程序设计思想的灵魂。类的概念:类是对具有相同特征的ー类事物的抽象。类的定义:类的定义使用class关键字,语法如下:[访问修饰符]class类名(〃类的主体)C#中的5种访问修饰符:(1)public对类的访问不受限,都可以访问.就像公共图图书馆,谁都可以进去看书.(2)protected对类的访问仅限于包含类或从包含类派生的类,就像单位图书馆,只能该单位或者子公司的人才能进去。(3)private 访问仅限于包含类,就好像私人图书馆ー样不对外开放。(4)interna!访问仅限于当前项目。就好像,允许派到本单位协助工作的人也能访问的单位图书馆,除了本单位的人能访问外,外单位派到本单位协助工作的人员也能访问。(5)protectedinterna!同时拥有protected的访问权限和internal的访问权限。类的成员(1)数据成员类要处理的数据,它包括常数和字段。成员变量的定义语法:[访问修饰符]数据类型成员变量名(2)属性成员属性是字段的ー种自然扩展,是ー个与类或对象相关联的命名。与字段不同的是:属性不表示存储位置,属性拥有访问器,访问器定义了读取或写入属性值时,必须执行的代码,读get{},写set}为了类的封装性,一般是把描述类的特征的字段定义为private,把属性设为public来操作私有的字段.定义属性成员的语法如下:[访问修饰符]数据类型属性名(get()Set()}(3)方法成员方法是用来描述对象的行为的,对类的数据成员的操作都封装在类的方法中。方法的主要功能是操作数据,没有方法的程序是没有意义的。方法的声明格式如下:[访问修饰符]返回值数据类型 方法名(参数列表)(//方法体)非静态成员方法可以直接访问非静态成员,可以直接访问静态成员,静态成员方法不可以直接访问非静态成员,可以直接访问静态成员方法调用的步骤如下:(1)实例化调用方法的类,创建对象。Dogobjdog=newDog();(2)用对象.方法名(参数)调用方法.objdog.方法名惨数);(4)静态成员静态成员是和类相关联的,不依赖于特定对象,可以作为"共"有成员。类的某个成员声明时,使用了static关键字,该成员就变成了“静态成员"。静态成员为类的所有对象所共享,非静态成员(实例成员)属于某个具体的对象。静态成员只能由类来调用,不能由对象调用。静态成员的使用,用类名.静态成员名,直接使用不需要创建对象。对实例成员的调用,要先创建对象,用对象名.实例成员名的方式来调用,只能访问public字段。从特许到ー般:C#中的对象对象的概念:类是具有相同特征的ー类事物的抽象,而对象是类的实例.类和对象有着本质的区别:类是从对象中抽取出来的ー类对象的描述,对象是类中的个体,是ー个具体的事物,创建对象就是从抽象到具体的过程,是将类的属性和行为实例化的过程。车型设计(类)======》 具体的车(对象)===》车型设计说明了车应该具有的所有属性和功能。但车型设计不是车,不能发动和驾驶===》对象就是根据车型设计造出来的车,具备车型设计所描述的属性和功能,车是能发动和驾驶的。ヌ搀的创建和使用:类名对象名=new类名(参数列表);匿名类型和对象初始化器Pointp=newPoint(){X=0,Y=0};/Z创建对象p,并对属性X和丫都赋值0;Varp=new{X=0,Y=2};/创建匿名对象p,并使用对象初始化器赋值;构造函数和析构函数(1)构造函数构造函数是类的特殊方法成员,名称和类名相同,主要是用来完成对象的初始化.C#通过new来创建对象的过程实际上就是调用类的构造函数的过程,创建对象时调用构造函数对对象进行初始化。=====》与类同名,无返回值类型=====》每个类都有构造函数=====》访问ー个类时,系统最先执行构造函数中的语句。(2)析构函数析构函数是对对象销毁前释放所占用系统资源的类的成员。析构函数的名字是在类名前加一个符号"〜"组成。析构函数不接受任何参数,不返回任何值。参数的传递:形式参数(定义方法时,声明的的参数。)〃一般在类中实在参数(调用方法时,实际传递给形式参数的值。)〃一般在主函数中========》实在参数和形式参数的变量名可以相同。值传递:值传递是C#默认的传递方式,使用值参数传递时,向形式参数传递的是实在参数的副本,方法内发生的对形式参数的更改对实际参数本身没有任何影响,就像文件的复印ー样,无论如何修改复印件,原件没有任何改变。classProgram(staticvoidSort(intx,inty,intz){inttemp;〃将x,y,z按从小到大排序if(x >y) {temp =x; x=y;y =temp;}if(x >z) {temp =x; x=z;z =temp;}if(y >z) {temp =y; y=z;z =temp;}Console.WriteLine("a={0},b={l},c={2}",x,y,z);}staticvoidMain(string[]args){inta,b,c;a=20;b=10;c=5;Sort(a,b,c);/Z输出了结果:a=5,b=10,c=20Console.WriteLine("a={0}/b={l}/c={2}",a,b,c);//输出了a=20;b=10;c=5})说明:在执行到Sort(a,b,c);的时候调用了staticvoidSort(intx,inty,intz)函数,此时将实际参数的值a=20;b=10;c=5;分别传递给了形式参数x,y,z。在执行函数内容前,x=20;y=10;z=5;执行完staticvoidSort(intx,inty,intz)函数时,x=5;y=10;z=15;然后输出了a=5;b=10;c=15e执行完Sort(a,b,c)后,执行Console.WriteLine("a={0},b={l},c={2}",a,b,c);语句这里的a,b,c是实际参数,没有发生任何改变,任然为a=20;b=10;c=5;故ー个2次输出了结果:输出了结果:a=5,b=10,c=20输出了a=20;b=10;c=5值传递时,方法内发生的对形式参数的更改对实际参数本身没有任何影响.引用传递:如果希望所调用的方法能更改实在参数的值,必须使用ref或out关键字声明通过引用传递方式传递参数,引用传递是把实在参数的地址传递给形式参数,形式参数和实在参数指向同一个存储单元,对形式参数的改变就是对实在参数的改变.ref要求参数在传递之前要进行初始化,。ut则不要求在参数传递前初始化。out要在调用函数返回前,对out传递的参数赋值.Out只能从方法中传出值,而不能从方法调用处接受实参数据classProgram(staticvoidSort(refintx,refinty,refintz){inttemp;〃将x,y,z按从小到大排序if(x> y){temp =x;x =y;y=temp;}if(x> z){temp =x;x =z;z=temp;}if(y> z){temp =y;y =z;z=temp;}Console.WriteLine("a={0},b={l},c={2}",x,y,z);}staticvoidMain(string[]args){inta,b,c;a=20;b=10;c=5;Sort(refa,refb,refc);〃输出了结果:a=5,b=10,c=20Console.WriteLine(wa={0}/b={l},c={2}",a,b,c);〃输出了a=5,b=10,c=20})说明:2次输出的结果:输出了结果:a=5,b=10,c=20输出了结果:a=5,b=10,c=20使用ref或。ut关键字,可以使得所调用的方法在改变形式参数的时候,更改实在参数的值总结:值传递,形式参数的改变,不影响实际参数,不能改变实际参数的值,引用传递,形式参数的改变,会导致实际参数的改变.结构与类结构和类相似,通常用来封装小型的相关变量组。结构是ー种值类型,创建结构比创建类的速度快。结构的定义和使用<访问修饰符〉struct结构名/Z结构体定义类和结构实际上都是创建对象的模板,都可以包含构造函数、常数.字段.方法、属性、索引器和运算符等成员。二者的主要区别如下。(1)结构是值类型,类是引用类量,在内存中结构是存储在堆桟上的值类型.类是存储在维(heap)上的引用类型,⑵结构的构造亜数和类的构造函数不同.结构不集包含显式的无参数构造函数.结构成员会自动初始化为它们的X认值结构不能包含以下形式的初始值设定类:base(参数列表L(3)对于结构中的实例字段成员,不能在ル明时JK值初始化。(4)声明了结构类型后.可以使用new运算符创建构造对象.也可以不使用new关・字,如巣不使用new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。(5)结构不支持埃承,即ー个结构不能从另ー个结构或类继承,而且不能作为ー个类的藻类分部类分部类实用于以下情况:(1)类型特别大,不宜放在ー个文件中实现。(2)ー个类型中的一部分代码为自动化工具生成代码,不宜与我们自己编写的代码混合在ー起(3)需要多人合作编写ー个类.分部类是ー个纯语言层的编译处理,不影响任何执行机制,C#编译器在编译时将分部类合并成一个完整的类.C#分部类是在class关键字前添加关键字partial来定义。PublicpartialclassPersonPartialvoidDoWork();)分部方法不可有返回值。声明命名空间namespace 定义的命名空间名称(/Z命名空间体)命名空间不过是数据类型的ー种组合方式,但命名空间中所有数据类型的名称都会自动加该命名空间的名字作为其前缀。using关键字using命名空间名称;例子: UsingSystem.Windows.Forms;MessageBox.Show("HelloC#!");静态类不能实例化,不能用new关键字创建静态类类型的变量。九、深入了解面向对象:面向对象的重要特征继承是软件复用的ー种形式.使用继承可以复用现有类的数据和行为,为其赋予新功能而创建出新类。节省开发时间,重用经过实践检测和调试的高质量代码,提供系统的质量。在现有类(基类、父类)上建立新类(派生类、子类)的处理过程称为继承。派生类能自动获得基类的除了构造函数和析构函数以为的所有成员,可以在派生类中添加新的属性和方法扩展其功能。<访问修饰符>class派生类名:基类名{/Z类的代码}继承的特性:可传递性:C从B派生,B从A派生,那么C不仅继承B也继承A。单一性:只能从一个基类中继承,不能同时继承多个基类继承中的访问修饰符base和this关键字基类的构造函数和析构函数不能被继承的。但可以使用关键字base来继承基类的构造函数。C#中的base关键字代表基类,使用base关键字可以调用基类的构造函数、属性和方法。A.this关键字l)this引用的是当前实例。2)this关键字是ー个隐含引用,它隐含于每个类的成员函数中。3)this关键字引用类的当前对象成员通过this关键字可以知道自己属于哪ー个实例。4)关键字this仅限于在构造函数、实例方法和类的实例中使用。5)不能在静态方法、静态属性访问器中或字段声明的"变量初始值设定项"中引用this.派生类的建立需要注意:.派生类会继承基类除了构造函数和析构函数的所有成员。.派生类调用构造函数时,会先调用基类的构造函数。默认调用没有参数的构造函数。.用base关键字显式调用基类构造函数。.如果需要调用基类中的同名方法,应该使用"base.方法名"来调用9.2多态的概念:C#中,多态的定义:同一个操作,作用于不同类的对象,不同类的对象进行不同的执行,最后产生不同的执行结果。多态的实现:C#中支持基于接口的多态和基于继承的多态。基于继承的多态设计在基类中定义方法,并在派生类中重写方法。多态和重写是紧密相联系的,重写是实现多态的重要手段。在基类中用virtua!关键字声明的方法(虚拟方法)在派生类中重写。访问修饰virtual返回值类型方法名(){//方法体)在派生类中重写基类中的虚拟方法,使用override关键字。9.2.3方法的重载、重写和隐藏在基类和派生类中可以存在同名方法,这些同名的方法可以重载、重写和隐藏。(1)重载
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沙漠区桥梁防晒措施技术方案
- 卸货流程培训
- 德佑房屋租赁合同
- 秘书工作总结
- 急诊科出科护理查房
- 求职简历教育模块设计要点
- 中职学校心理健康教育
- 结石患者术前术后护理
- 幼儿园健康标志趣味认知课程
- 文案策划新人培训
- 2021年福建石狮国有资本运营集团有限责任公司招聘笔试试题及答案解析
- 银行定期存单样本
- 商店消防安全检查整改报告范文4篇
- 江苏省盐城市2022-2023学年七年级下册生物期中试卷
- 超星尔雅学习通《心理行为与文化》章节测试含答案
- 基本药物和国家基本药物制度
- Photoshop二级考试试题及答案
- 裂隙灯数码型slm说明书
- 机械识图基础知识
- 伤口基础知识和湿性愈合理论
- 完整版重点环节重点人群与高危险因素管理与监测计划
评论
0/150
提交评论