版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.命名规范:(1) Pascal风格:多个英文单词时,每个英语单词的首字母要大写(2)Camel风格:包含一个或者多个单词时,每个英语单词首字母要小写参数和变量使用 Camel风格,其他都用 Pascal风格2.控制台应用程序:类似DOS窗口那样,以con sole命令方式运行的程序Console.writeline(“XJTloveMH ” );/ 输出:XJTIoveMHCon sole.readyok();/暂停运行结果,按任意键结束。3. Windows窗体应用程序:各种客户端程序,有很好的人机交互界面,基于C/S架构的程2.1值类型2.2引用类型2.3指针类型2.1值类型:(1 )
2、整数类型有符号 sbyteshortintlong无符号 byteushortuintulong左-右可以转换(小 -大转换)(2)浮点数类型(带小数部分的数值)单精度(float )浮点类型双精度(double )浮点类型若对于浮点数没有进行任何明确的声明,默认是double类型。要是强制将其制定为float类型,要在后面加上字符“F”或“ f”(3 )字符类型(char)字符串类型(string )字符常量是用单引号括起来一个字符。将字符放在双引号里,编译器会把它看做字符串。转义字符:(4) decimal类型(十进制decimal类型)为了适应高精度的财务和货币计算的需求,C#提供了十进
3、制decimal类型。要把数字定义为 decimal类型,而不是double或float或者整数类型,可以在数字后加字符“ M ”或“ m ”。(5)布尔类型(bool ),用来表示“真”或者“假”的逻辑数据类型。只有2种取值,真(true )或者假(false )。例子:计算圆的面积usingSystem;usingusingSystem.L inq;usingSystem.Text;usingnamespace circle class Programstaticvoid Main( string args)decimalpi=3.14159m;int r=12;decimals=0;s=
4、p i*r*r;Con sole.WriteLine("圆的半径是:=0n 圆的面积是:=1" ,r,s);0和1是占位符,将r和s的结果显示在0和1的位置显示Console .ReadKey(); II控制台暂停符合,暂停运行结果Con sole .ReadL in e();2.2引用类型:(用来描述结构复杂,抽象能力比较强的数据。与值类型是相并列的。)同为引用型的2个变量可以指向同一个对象, 也可以针对同一个变量产生作用,或被其他同类型的变量所影响。字符串,类,接口,委托,数组都是引用型变量。1 )字符串:(由放在一对双引号中的多个字符组成的一个串。)看做字符组成的数组
5、。使用 string 来声明字符串变量。数据类型之间的转换:A.隐式转换:1)数值类型 之间的隐式转换小到大可以转换,转换可能导致 精度丢失,但不影响数量级 。不能大到小转换。2)var 类型 数据隐式转换:Var 定义的变量的数据类型由赋值的数据决定。Eg: varname= “ XJT” ,这时候 name 就是字符串类型,隐式转换。Varname=250, 这时候 name 就是 int 类型,进行了隐式转换。B.显示转换:(强制类型转换)要用户明确指定转换的类型。C.使用convert类来转换:(是一种隐式转换)D.数值和字符串之间的转换:1) ToString ()方法:数值类型的
6、ToString ()方法可以将数值型数据转换为字符串。变量名 .ToString ()eg:intn=10 stringm=n.ToString();/ 变量名 .ToString (),这个变量名哟和前面声明的变量名保持一致2) Parse ()方法:数值类型的的 Parse ()方法可以将字符串转换为数值型。数值类型 .parse( 变量名 )string b=a.ToString(); /int 型 a,转换为字符串bIntn=int.Parse(m);/数值类型.parse(变量名),这个数值类型要和新声明的变量类型保持一致。转换的例子:usingSystem;usingusingS
7、ystem.L inq;usingSystem.Text;usingusingnamespace chargeclass Programstaticvoid Main( string args)double i=3.1415926;ints=( int)i;/强制将double 型的i转换为int型的sdouble s1= Convert .Tolnt32(s); / 整型 s 隐式转换为 double 型的 s1string m=;int n= int .Parse(m); /字符串 m,转换为int型数值nint a=1000;Con sole .WriteL in e(s1);Con s
8、ole .WriteLi ne(n);Con sole .WriteL in e(b);/MessageBox.Show(s1.ToStri ng();/MessageBox.Show输出的是一个text的字符串,所以要讲int型的s1转换为字符串Con sole .ReadKey();/转换时,小-大ok不能大-小E.装箱和拆箱:(数据转换类型的一种特许应用)装箱是将“值”类型转换成“引用”类型(数值-字符串是其一种表现)拆箱是将“引用”类型转换成“值”类型。(字符串-数值是其一种表现)封箱和拆箱的例子:usingSystem;usingusingSystem.L inq;usingSyst
9、em.Text;using namespace _3.khlxclass Program staticvoid Main( string args) int x=100;object obj=x;Console .WriteLine( "x 的初始值为0,装箱后的值为1" ,x,obj.ToString();/封箱:将数值转换为字符串 int y=( int )obj;Con sole .WriteLi ne("引用类型的值为0,拆箱后的值为1" ,obj.ToStri ng(),y);/拆箱:将字符串转换为数值。Con sole .ReadKey();
10、值类型变量和引用类型变量的使用区别:值类型变量不需要用new关键字类分配内存,定义完就可以直接使用,引用类型变量则需要为其赋值后,才能使用。值类型变量,在定义后就完成了内存的分配,引用类型,在定义后,没有为其分配内存,必 须显式用new关键字来为其分配内存。二.变量和常量3.1变量在程序执行过程中,不段变化的量值1)变量的命名:变量名 必须以 “字母或下划线“开头 ,只能由 字母、数字、和下划线组成。变量名 不能包含 空格、标点符号、运算符 字符。变量名 不能与 C# 中的 关键字、运算符或函数名 同名。使用多个单词组成变量名时,使用骆驼命名法( camelCase ),即第一个单词的首字母小
11、 写,其他单词的首字母大写。2)变量的声明和赋值变量的声明语法如下:访问修饰符 变量修饰符 变量的数据类型变量名表;访问修饰符和变量修饰符可以省略。Privateintx=10Intx=3,y=4;3)隐式类型的局部变量(匿名变量)使用关键字 var 来声明,可以 用 var 来声明任何类型的局部变量 ,它只负责告诉编 译器,该变量需要根据初始化表达式来推断变量类型,而且只能是局部变量。隐式类型的局部变量的语法如下:Var 变量名称 = 变量值;Vari=8 ;/ 定义局部变量 i;i 作为整数型数据被编译。程序运行过程中,值不发送改变的变量3.2 常量:常量的声明语法如下:访问修饰符 con
12、st 类型常量表达式;Constintmonth=121 )变量前加 const 关键字,就可以将该变量声明为常量。2 )变量实际上代表的是数据真实的存储位置,变量的类型决定了它的存储的数值。先 给变量声明类型后才能赋值。四运算符与表达式4.1 运算符:表示各种不同运算的符号。自加运算符: 前置自加:x=+y; 计算过程是 y=y+1 ; x=y ; 后置自加:X=y+ ;计算过程是 x=y ; y=y+1 ;前置自减:x=y-; 计算过程是 y=y-1 ;x=y ;结构:(操作数 1?操作数2 ,操作数 3)后置自减:X=y- ;计算过程是 x=y ;y=y-1 ;其他运算符:1 )条件运算
13、符如果操作数 1 是真,输出操作数 2 ,如果操作数 1 是假,输出操作数 32 )()运算符 用于指定操作数中的 运算顺序 和指定 强制转换或类型转换。3 )点运算符 点运算符( .)用于访问数据结构的成员。结构:数据结构 .成员4 )索引运算符 索引运算符( )用于数组、索引器和属性,也可用于指针。5 ) new 运算符new 运算符用于创建一个新的类型实例,有 3 种形式:a.对象创建表达式,用于创建一个类类型或值类型实例 b.数组创建表达式,用于创建一个数组类型实例C.代表创建表达式,用于创建一个新的代表类型实例6 ) typeof 运算符 用于获取系统原型对象的类型,也就是 Type
14、 类型。 Type 类包含关于值类型 和引用类型的信息。7 ) CheCked 和 unCheCked 运算符 用于检测指定的运算,并指出相应的错误信息。4.3 表达式:4.2 运算符的优先级用运算符把操作数连接起来的式子。操作数包括文本、变量、常量和表达式等五程序的基本结构5.1 顺序结构:每一条语句都要执行并且只执行一次, 语句的执行先后次序和语句在顺序结构中出现的先后 次序一致。程序代码中最基本的结构, 逐条执行程序中的每一天语句, 从程序开始执行到程序结束为止。5.2 分支结构:程序设计过程中,经常要根据条件进行判断,选择要执行的语句序列。分支结构:根据条件的不同,选择执行程序中的不同
15、分支,每个分支对应一个语句 序列。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 分支结构多用于常量比较
16、少的情况。5.3 循环结构:在程序开发中, 经常要反复执行某段代码, 为了避免重复输入相同代码, 同时提高程序代码 得可读性, 引入了循环结构, 需要反复执行的代码称为循环体。 循环结构使用循环条件控制 循环体代码得执行与否,循环条件中通常使用一个特殊的变量,循环变量。C# 提供的循环语句有: for 语句, while 语句, dowhile 语句和 foreach 语句。1 )for 循环for (表达式 1;表达式 2;表达式 3 )循环体2 ) while 循环While (表达式)循环体3 ) do-while 循环do循环体while (表达式)4 ) foreach 循环fore
17、ach 循环用于遍历整个集合或数组, 可以获取集合中的所有对象, 不需要给出循环 变量和循环条件,也不需要给循环变量赋初值和修改循环变量的值。foreach (数据类型局部变量in集合或者数组)循环体5.4循环嵌套(循环嵌套就是在循环体中还可以使用循环语句。)循环嵌套需要区分外层循环和内层循环,外层循环执行一次,内层循环执行一遍。 外层循环和内层循环的循环控制要互相独立。外层循环和内层循环要定义 2个不同的循环变量。如果循环结构在for语句中定义循环变量,该变量被视为局部变量,循环结构结束后,变量就被释放,循环语句外再引用这个循环变量就会出错。六.异常处理与程序调试6.1C#错误类型:(1 )
18、语法错误:代码不符合 C#语言的语句。(2 )运行错误:异常。(3 )逻辑错误:没有实现编程人员的设计意图和功能。6.2异常处理概述:异常:程序执行时遇到的错误情况或意外行为。异常处理:编程人员在程序编写过程中对可能发生的错误和异常预先采取的处理措施。常见的异常类有:6.3 异常处理过程:try-catch 语句是 C# 提供的异常处理语句,语法如下:try可能出现异常的语句序列;Catch (异常类型异常对象)对可能出现的异常进行处理;try-catch-finally 语句,语法如下:try可能出现异常的语句序列;Catch (异常类型异常对象)对可能出现的异常进行处理;finally最后
19、要执行的代码,进行必要的清理操作,以释放资源throw 语句 在 try-catch 和 try-catch-finally 语句中的 try 块中,除了系统自动抛出异常外,也可以使 用 throw 语句抛出异常; throw 语句既可以引发系统异常,也可以引发自定义异常。throw 异常对象 自定义异常类: 如果系统提供的异常类不能够与程序中的异常相匹配,就需要自定义异常类。自定义异常类的语法如下:Class 自定义异常类名:异常基类名/ 语句块6.4 程序调试:程序调试的主要目的是解决程序中的逻辑错误,通过设置断点,跟踪观察程序的执行过程, 发现造成逻辑错误的具体语句,然后修改程序实现设计
20、目标。1 )鼠标左键单击代码窗口最左边灰色区域对应语句行的位置添加断点,再次 单击删除断点,左侧的红色圆点即为断点(2 )鼠标左键单击语句所在行,然后按 F9来添加断点,再次按 F9删除断点3 )鼠标左键单击语句所在行,然后右键单击,在弹出的快捷菜单中选择【断 点】 - 插入断点。6.4.2 启动、继续和停止调试选择菜单【调试】 - 启动调试或按 F5 键启动调试,或单击工具栏的启 动按钮,启动调试。启动调试后,可以选择菜单【调试】 - 【停止调试】来停止调试。6.4.3 单步调试启动调试后,可以在菜单中选择【调试】 - 【逐语句】或者【调试】逐过程】进行逐语句或逐过程调试。= 逐句调试相当于
21、为程序中的每个语句都加上一个断点,每次执行一条语句。= 程序执行到被调用函数内部,需要停止逐语句调试时,可以选择【调试】- 【跳出】,程序将返回到调用函数。6.4.4 调试监控Visualstudio 提供了局部变量窗口、监视窗口、自动窗口和快速监视窗口等对程序的运行进行监控。1)局部变量窗口( 2)自动窗口( 3 )监视窗口( 4)快速监视窗口常用数据类型的用法7.1 字符串(C#中,字符串常用于 C#重新的输入、输出,文件读、写操作 )A.创建字符串:String 字符串变量名;Stringstr= ” XJT”1 )在定义字符串变量的同时赋值 Stringstr= ”XJT”;2 )将一
22、个字符串赋值给另外一个字符串:stringa=str+ ”123 ”3 )使用创建 string 对象的方式,创建包含指定个数给定字符的字符串。Stringa=newstring( a ' ,5);/ 创建了一个字符串stringa= ” aaaaa ”B.字符串基本操作:1 )字符串判等a.字符串变量I.Equals (字符串2);其中字符串 2 可以是变量也可以是常量。字符串变量 1 调用成员函数 Equals (),比较字符串变量1 对应的字符串与字符串 2 是否相等,相等返回 True, 不相等返回 False 。b.String.Equals(字符串 1 ;字符串 2) ;E
23、g: stringa= ”XJT”Stringb=s;string.Equals(a,b);Console.WriteLine(a.Equals(b);/=2 )字符串的比较a.字符串变量.CompareTo(字符串2);b.Spare( 字符串 1,字符串 2);字符串比较方式:找到 2 个字符串中第一个不相同的字符,该字符 ASCII 码值 小的字符串小。若字符串变量小于字符串 2 返回 -1 ,字符串 变量小于字符串 2 相等返回 0,字符串变量小于字符串 2 大 于返回 1.3)判断字符串变量是否包含指定字符或字符串 a.字符串变量.Contains(字符1);b.字符串变量.Cont
24、ains(字符串2);4)查找字符串变量中指定字符或字符串出现的位置 a.字符串变量.IndexOf(字符1);b.字符串变量.IndexOf 字符串2);返回要查找的 字符或者字符串首字母在字符串中的位置数值。5)取子串a.字符串变量.SubString(起始位置,字符串长度);II取给定长度子字符串b.字符串变量.SubString (起始位置);/取到字符串结尾6)插入子串a. 字符串变量 .Insert起始位置,子字符串 2);一个字符串起始位置是0,7 )删除子串字符串变量 .Remove(起始位置,子串长度 );字符串变量 .Remove(起始位置 );不指定子字符串串长度就取值到
25、字符串变量结尾。8)替换子串字符串变量 .Replace( 字符串 1,字符串 2);/ 字符串 2替换字符串 19 )去除字符串空格 字符串变量 .Trim(); 除去字符串头部和尾部的空格 。C.StringBuilder 类String 类是引用类型,每次改变 string 类对象的值,(修改字符串变量对应 的字符串),都需要再内存里为新字符串重新分配空间。会导致内存开销大, 所以引入 StringBuilder 类。7.2 数组1.一维数组:理解为一个表格,一维数组就是一个一行多列的表格。数组中的数据称为数组 元素。数组不能直接使用,要先对数组进行初始化。初始化就是指出数组中元素的个数
26、,为数组分配内存空间,也可以同时为数组 元素赋值。a.数据类型数组名=new数据类型数组元素个数数组元素列表;b.数组名=new数据类型数组元素个数;Inta=newint51,2,3,4,5;a=newint51,2,3,4,5;下标 ”的方数组包含多个数组元素,为了区分数组的不同元素,使用“数组名 式访问数组元素。 C# 中提供了一个属性 Length ,来表示数组的长度,也就是数组中元素的 个数。2. 二维数组: 一维数组就是一个一行多列的表格,二维数组可以看作多行多列的表格。二维数组语法格式: 数组类型 ,数组名 =new 数据类型 行数,列数 数组元素列表 ;数组类型 ,数组名 =n
27、ew 数据类型 行数,列数 ;3. 数组的基本操作:1 )数组排序和反转Array 类的静态方法 Sort ()可以实现数组的排序,无返回值。Array.Sort( 数组名 );/ 升Array.Reverse( 数组名 );/ 降2 )查找数组元素Array 类的静态方法 IndexOf() 可以判断数组是否包含与给定值相等的元 素,是返回对应数组元素的下标,否则返回 -1.Array.IndexOf( 数组名,要查找的值 );3 )数组元素求和、最大值、最小值、平均值:C# 提供了方法 sum ()、 Max ()、 Min ()、 Average ()对数组 元素进行统计。数组名 .su
28、m();4 )数组字符串相互转化:String 类的静态方法 Join ()可以将数组中所有元素连接起来,生成 一个字符串,返回值为该字符串。String.join( 分隔符,数组名 );String 类的方法 Split(); 可以根据分隔符将字符串切分为多个部分,每个 部分作为一个数组元素生成一个字符串数组,返回值为该字符串数组。字符串变量 .Split( 分隔符 );5 )在字符串中查找、删除字符数组元素:String 类方法 IndexOfAny(); 在字符串中查找给定字符数组中的所有 元素,返回 字符数组元素在字符串中首次出现的位置值 ,查找失败则返回 -1.字符串变量.Index
29、OfAny(字符数组名);Stri ng类方法Last In dexOfA ny();在字符串中查找给定字符数组中所有元素,返回 字符数组元素在字符串中最后出现的位置值,查找失败则返 回-1。字符串变量.LastIndexOfAny(字符数组名);:组是C#中重要的数据类型,可以作为参数传递给某个方法。7.3枚举枚举类型用于声明一组命名常数。语法格式:enum枚举类型名枚举成员列表En umweek=星期一,星期二,星期三,星期四,星期五,星期六,星期天枚举类型定义在类定义之外。八.主流软件开发方法:面向对象8.1面向对象的编程思想面向对象编程:booch对对象的描述:对象具有状态、行为和标识
30、。这意味着每一个对象 都可以拥有内部数据(它们给出了该对象的状态)和 方法(它们产生行为),并且每一个对象都可以唯一地与其他对象区分开来,具体说来,就是每一个对象在内存中都有一个唯一地 址。8.2从特许到一般:C#中的类面向对象程序设计的基础是类和对象。类是面向对象程序设计思想的灵魂。8.2.1 类的概念 :类是对具有相同特征的一类事物的抽象。8.2.2 类的定义: 类的定义使用 class 关键字,语法如下: 访问修饰符 class 类名/ 类的主体C#中的5种访问修饰符:1 )public 对类的访问不受限,都可以访问。就像公共图图书馆,谁都可 以进去看书。2 ) protected对类的
31、访问仅限于包含类或从包含类派生的类,就像单位 图书馆,只能该单位或者子公司的人才能进去。3 )private 访问仅限于包含类,就好像私人图书馆一样不对外开放。4 )internal 访问仅限于当前项目。就好像,允许派到本单位协助工作 的人也能访问的单位图书馆,除了本单位的人能访问外, 外单位派到本单位协助工作的人员也能访问。5 ) protectedinternal 同时拥有 protected 的访问权限和 internal 的 访问权限。8.2.3 类的成员1 )数据成员类要处理的数据,它包括 常数和字段 。成员变量的定义语法: 访问修饰符 数据类型成员变量名2 )属性成员 属性是字段的
32、一种自然扩展,是一个与类或对象相关联的命名。与字 段不同的是:属性不表示存储位置,属性拥有访问器,访问器定义了读取 或写入属性值时,必须执行的代码, 读 get ,写 set 。 为了类的封装 性,一般是把描述类的特征的字段定义为 private ,把属性设为 public 来 操作私有的字段。定义属性成员的语法如下: 访问修饰符 数据类型属性名get()Set()3 )方法成员 方法是用来描述对象的行为的,对类的数据成员的操作都封装在类 的方法中。方法的主要功能是操作数据,没有方法的程序是没有意义的。方法的声明格式如下: 访问修饰符 返回值数据类型 方法名(参数列表)/ 方法体非静态成员方法
33、 可以直接访问非静态成员,可以直接访问静态成员, 静态成员方法 不可以直接访问非静态成员,可以直接访问静态成员 方法调用的步骤如下:1 )实例化调用方法的类,创建对象。Dogobjdog=newDog();2)用对象 .方法名 (参数 )调用方法。objdog. 方法名 (参数 );4 )静态成员 静态成员是和类相关联的,不依赖于特定对象,可以作为“共” 有成员。类的某个成员声明时,使用了 static 关键字,该成员就变成了“静 态成员”。静态成员为类的所有对象所共享,非静态成员(实例成员)属 于某个具体的对象。静态成员只能由类来调用,不能由对象调用。静态成员的使用,用 类名 .静态成员名
34、,直接使用不需要创建对象。对实例成员的调用, 要先创建对象,用 对象名 .实例成员名 的方式来调用,只能访问 public 字段。8.3 从特许到一般: C# 中的对象8.3.1 对象的概念: 类是具有相同特征的一类事物的抽象,而 对象是类的实例 。类和对象有着本质的区别: 类是从对象中抽取出来的一类对象的描述,对象是类中的个体,是一个具体的事物,创建对象就是从抽象到具体的过程,是将类的属性和行为实例化的过程。车型设计(类)具体的车(对象)车型设计说明了车应该具有的所有属性和功能。但车 型设计不是车,不能发动和驾驶= 对象就是根据车型设计造出来的车,具备车型设计所描 述的属性和功能,车是能发动
35、和驾驶的。8.3.2 对象的创建和使用: 类名对象名 =new 类名(参数列表);8.3.3 匿名类型和对象初始化器Pointp=newPoint()X=0, Y=0;/创建对象p ,并对属性 X和丫都赋值0 ;Varp=newX=0 ,Y=2 ;/ 创建匿名对象 p ,并使用对象初始化器赋值;8.3.4 构造函数和析构函数1 )构造函数 构造函数是类的特殊方法成员, 名称和类名相同,主要是用来完成对象的初始化。C# 通过 new 来创建对象的过程实际上就是调用类的构造函数的过程,创建对 象时调用构造函数对对象进行初始化。与类同名 ,无返回值类型每个类都有构造函数访问一个类时,系统最先执行构造
36、函数中的语句。2 )析构函数 析构函数是对对象销毁前释放所占用系统资源的类的成员。析构函数 的名字是在类名前加一个符号“ ”组成。析构函数不接受任何参数,不 返回任何值。8.3.5 参数的传递:形式参数( 定义方法时,声明的的参数。 ) / 一般在类中实在参数( 调用方法时,实际传递给形式参数的值。) / 一般在主函数中实在参数和形式参数的变量名可以相同。值传递: 值传递是 C# 默认的传递方式,使用值参数传递时,向形式参数传递的是实在 参数的副本,方法内发生的对 形式参数的更改对实际参数本身没有任何影响 ,就像 文件的复印一样,无论如何修改复印件,原件没有任何改变。例子:classProgr
37、amstaticvoidSort(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=1,c=2",x,y,z);staticvoidMain(stringargs)inta,b,c;a=20;b=10;c=5;Sort(a,b,c);/ 输出了结果 :a=5,b=10,c=20Console.WriteLine("a=0,
38、b=1,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=15。执行完 Sort( a,b,c)后,执行 Console.WriteLine("a=0,b=1,c=2"
39、,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 要求参数在传递之前要进行初始化, out 则不要求在参数传递前初始化。 out要在
40、调用函数返回前,对out传递的参数赋值。Out只能从方法中传出值,而不能从方法调用处接受实参数据例子:classProgramstaticvoidSort(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=1,c=2",x,y,z); staticvoidMain(stringargs)inta,b,c;a=20;
41、b=10;c=5;Sort(refa,refb,refc);/ 输出了结果 :a=5,b=10,c=20Console.WriteLine("a=0,b=1,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 或 out 关键字,可以使得所调用的方法在改变形式参数的时候, 更改实在参数的值总结: 值传递,形式参数的改变,不影响实际参数,不能改变实际参数的值, 引用传递,形式参数的改变,会导致实际参数的改变。8.4 结构与类结构和类相似,通常用来
42、封装小型的相关变量组。结构是一种值类型 ,创建结构比创建类的速度快。8.4.1 结构的定义和使用< 访问修饰符 >struct 结构名/ 结构体定义8.4.2 类和结构的关系8.5 分部类分部类实用于以下情况:1)类型特别大,不宜放在一个文件中实现。2)一个类型中的一部分代码为自动化工具生成代码,不宜与我们自己编写的代码混合在一起3)需要多人合作编写一个类。C#编译器在编译时分部类是一个纯语言层的编译处理,不影响任何执行机制,将分部类合并成一个完整的类。C#分部类是在class关键字前添加关键字partial来定义。PublicpartialclassPersonPartialvo
43、idDoWork ();分部方法不可有返回值。8.6命名空间 names pace 定义的命名空间名称/命名空间体命名空间不过是数据类型的一种组合方式,但命名空间中所有数据类型的名称都会自动加该 命名空间的名字作为其前缀。862usi ng 关键字using命名空间名称;例子:Usi ngMessageBox.Show( “ HelloC# !” );静态类不能实例化,不能用 new关键字创建静态类类型的变量。九、深入了解面向对象:面向对象的重要特征继承是软件复用的一种形式。使用继承可以复用现有类的数据和行为,为其赋予新功能而创建出新类。节省开发时间,重用经过实践检测和调试的高质量代码,提供系
44、统的质量。9.1继承的定义和使用在现有类(基类、父类)上建立新类(派生类、子类)的处理过程称为继承。派生类能自动获得基类的除了构造函数和析构函数以为的所有成员,可以在派生类中添 加新的属性和方法扩展其功能。访问修饰符class派生类名:基类名/ 类的代码9.1.1 继承的特性:可传递性:C从B派生,B从A派生,那么C不仅继承B也继承A。单一性:只能从一个基类中继承,不能同时继承多个基类继承中的访问修饰符9.1.2base 和 this 关键字base 来继承基类的构造函数和析构函数不能被继承的。但可以使用关键字基类的构造函数。C# 中的 base 关键字代表基类,使用 base 关键字可以调用
45、基类的构造函数、属性和方法。A.t his 关键字1)this 引用的是当前实例。2)this 关键字是一个隐含引用,它隐含于每个类的成员函数中。3)this 关键字引用类的当前对象,成员通过 this 关键字可以知道自己属于哪一个实例。中引用 this 。4) 关键字 this 仅限于在构造函数、实例方法和类的实例中使用。5) 不能在静态方法、 静态属性访问器中或字段声明的 “变量初始值设定项” 派生类的建立需要注意:(1).派生类会继承基类除了构造函数和析构函数的所有成员。(2). 派生类调用构造函数时,会先调用基类的构造函数。 默认调用没有参数的构造函数。(3). 用 base 关键字显
46、式调用基类构造函数。(4).如果需要调用基类中的同名方法,应该使用”base. 方法名”来调用9.2多态的概念:C#中,多态的定义:同一个操作,作用于不同类的对象,不同类的对象进行不同的执行,最后产生不同的执行结果。9.2.1多态的实现:C#中支持基于接口的多态 和基于继承的多态。基于继承的多态设计在基类中定义方法,并在派生类中重写方法。多态和重写是紧密相联系的,重写是实现多态的重要手段。在基类中用virtual关键字声明的方法(虚拟方法)在派生类中重写。访问修饰virtual返回值类型方法名()/方法体在派生类中重写基类中的虚拟方法,使用override关键字。9.2.3方法的重载、重写和隐藏在基类和派生类中可以存在同名方法,这些同名的方法可以重载、重写和隐藏。(1)重载(方法同名,但参数列表不同)一系列同名方法,但是重载是在同一个作用域内
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度工厂土地租赁与供应链管理合同
- 2024年度园林绿化苗木种植及智能灌溉技术合同3篇
- 2024年度军人离婚赡养及子女抚养责任协议2篇
- 2024版北京房屋租赁居间服务期限合同3篇
- 2024年度物流仓储设备采购与租赁合同2篇
- 团队激励课程设计
- 2024年度高新技术企业知识产权保护合作服务合同2篇
- 2024年度物联网研发与应用项目合同3篇
- 2024年度外墙真石漆材料采购与质量验收合同3篇
- 2024年度软件开发项目可行性研究报告编制合同2篇
- 人工智能技术咨询行业可行性分析报告
- 2024 年度校长述职报告:坚守教育初心铸就卓越未来
- 2024年建筑施工起重机械设备安全管理制度(3篇)
- 中国近现代史纲要(海南大学)知到智慧树章节答案
- 中国少数民族文化智慧树知到期末考试答案章节答案2024年云南大学
- 宁波市地面沉降基础资料
- 关于21三体综合症的综述
- 减速机CAD版图纸
- 公司人事档案管理办法规章制度
- 工程观测、试验资料的整理与分析
- 卵巢过度刺激综合征患者的护理
评论
0/150
提交评论