CSharp1.ppt_第1页
CSharp1.ppt_第2页
CSharp1.ppt_第3页
CSharp1.ppt_第4页
CSharp1.ppt_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

1、C#程序设计基础,$1 绪论,特点,结构化程序设计 面向对象的程序设计 基于组件的程序设计 CORBA, Java EJB COM COM+/DCOM 桌面应用 网络应用 Internet应用,组成,.NET Framework环境结构,绪论,C#语言,C#语言,C#语言特性 简洁的语法 精心的面向对象设计 与Web的紧密结合 完整的安全性与错误处理 版本处理技术 灵活性与兼容性,C#语言,C# 2.0 新增特性 泛型 可空类型 遍历器(自学) 匿名方法(自学) 分部类型(自学),C#语言,C# 3.0 新增特性 类型推理 Lambda表达式 扩展方法 对象创建表达式 匿名类型 分部方法,绪论

2、,开始编写C#应用程序,第一个C# 应用程序,using System; namespace P1_1 public class FirstProgram public static void Main(string args) Console.WriteLine(Welcome to .NET); ,Pascal大小写和camel规则,标识符有两种常用命名规则:Pascal大小写和camel规则。 Pascal 大小写:将标识符的首字母和后面连接的每个单词的首字母都大写。例如:BackColor 大小写混合camel规则:标识符的首字母小写,而每个后面连接的单词的首字母都大写。例如:back

3、Color Pascal规则:命名空间、类名、方法名等。 camel规则:字段,变量等。,C# 程序基本结构,命名空间 P10 类型、类和方法P10 程序主方法P11 程序注释P12,命名空间,命名空间是c#代码的基本组织形式,类、结构等各种类型定义都包含在命名空间中,而命名空间也可以嵌套在另一个命名空间中,这就形成一个逻辑上的层次体系结构。 作用 解决命名冲突问题 调用更加简洁,程序注释,多行注释 /*第一行 第二行*/ 单行注释 /这里是单行注释 三行注释 以后介绍,1.6 与用户进行交互,控制台交互程序 举例演示,Windows应用程序,举例演示,C#程序设计基础,第二章 数据类型,C#

4、数据类型,值类型 简单类型:整数 字符 实数 布尔 复合类型:结构 枚举,整数类型:sbyte、byte、short、ushort、int、uint、long、ulong和char。 布尔类型bool:表示的逻辑变量,只有两种取值:“真”或“假”,采用“true”和“false”两个值来表示。 字符类型包括数字字符、英文字母和表达符号等。 实数类型包括浮点类型和十进制类型: 浮点类型包括单精度类型(float)型和双精度类型(double)。 十进制类型(decimal): 十进制类型适合应用在不能接受舍入误差的计算中。,整数、实数、字符和布尔类型,结构类型,把一系列相关的变量组织成为一个单一

5、实体的类型称为结构类型,每一个变量称为结构的成员。 例:将一个点的x坐标和y坐标组成一个点结构类型。结构是使用struct关键字定义的,定义一个点结构类型point的代码如下: struct Point public int x,y; /定义字段 ,结构举例,using System; namespace Example class Program static void Main(string args) SPoint s1 = new SPoint(); s1.x = 0; s1.y = 0; s1.DisplayPoint(); SPoint s2 = s1; s2.x = 5; s2.

6、y = 10; s1.DisplayPoint(); struct SPoint public int x; public int y; public void DisplayPoint() Console.WriteLine(类变量c1: x=0, y=1, x, y); ,枚举(enum)类型由一组命名常数组成,这组命名常数称为枚举列表;每一个枚举类型都具有一个底层基本类型。 底层基本类型必须是内置的有符号或无符号整数类型(如Int16、Int32或Int64)。枚举元素的默认类型为int,并且在默认情况下,第1个元素的值为0,后续的元素依次递增1。 例如,在下面的枚举变量color中,R

7、ed=0、Green=1,依次类推。 enum colorRed,Green,Blue,White,Black; 在声明枚举变量时还可以指定底层的基本类型,例如下面的语句,指定long为底层的基本类型。 enum Range:long Max = 2147483648L,Min = 255L;,枚举类型,枚举举例,/程序清单P2_5.cs: using System; namespace P2_5 class EnumSample public static void Main() Weekday w1; w1 = Weekday.Monday; Console.WriteLine(w1);

8、w1 = w1 + 1; Console.WriteLine(w1); w1 = (Weekday) 4; Console.WriteLine(w1); enum Weekday Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ,引用类型,类 与结构类似,不同点为结构是值类型,类是引用类型。 接口 应用程序之间相互调用的协议,被调用一方在协议中对自已能提供的服务进行描述,另一方在调用之前,先检查协议存在哪些服务,其中哪些能满足自已的要求。 委托 类似C+中的指针,用于封装对一个或多个方法的引用。 数组 (在后面介绍)

9、,类举例,using System; namespace Example class Program static void Main(string args) CPoint c1 = new CPoint(); c1.x = 0; c1.y = 0; c1.DisplayPoint(); CPoint c2 = c1; c2.x = 5; c2.y = 10; c1.DisplayPoint(); class CPoint public int x; public int y; public void DisplayPoint() Console.WriteLine(类变量c1: x=0,

10、y=1, x, y); ,i: 123,s,Hello world,int i = 123;,j: 123,t,int j = i;,string t = s;,string s = Hello world;,值类型与引用类型比较,内存“堆栈”和“堆”,“堆栈”和“堆”是运行库对内存进行组织的两种方式。 堆栈内存就像一系列堆叠越高的箱子。 堆内存则像散布在房间里的一大堆箱子,而不像堆栈那样每个箱子都严格地叠置在另一个箱子上方。每个箱子都有一个标签,它标记了这个箱子是否使用。 创建一个新对象时,运行库会查找一个空箱子,并把它分配给对象。对对象的引用存储在堆栈上的一个局部变量中。运行库将跟踪对每一

11、个箱子的引用数量, (两个变量可能引用同一个对象)。一旦最后一个引用消失,运行库就将箱子标记为“未使用”。 所有值类型都是在堆栈上创建的,所有引用类型(对象)都是在堆上创建的。,类型转换,值类型值类型 P40 低精度类型高精度类型:隐式转换 高精度类型低精度类型:显式转换 引用类型引用类型 P43 派生类型基础类型:隐式转换 基础类型派生类型:显式转换 Null 数组 值类型引用类型P45 值类型引用类型:隐式转换(装箱) 引用类型值类型:显式转换(拆箱),int i = 123; object o = i; int j = (int) o;,i: 123,o,System.Int32,装箱,

12、j:,123,System.object,123,拆箱,System.Int32,装箱与拆箱过程,数组,数组用于对同一类型的数据进行批量处理,它包含多个数据对象,这些对象叫做“数组元素”。数组元素的类型可以是值类型,也可以是引用类型,还可以把数组本身作为另一个数组的数组元素。,一维数组,定义:P36 T array-name; 初始化: array-name = new Tsize; 访问数组元素: 定义 + 初始化 + 赋值:T array-name = const-exp;,一维数组使用,方法一 int array1 = new int3; array10 = 1; array11 = 2

13、; array12 = 4; 方法二 int array1 = new int31,2,4; int array1 = 1,2,4;,多维数组- 规则,定义:P37 T, array-name; T, array-name; 初始化: array-name = new Tsize1, size2; 访问数组元素: , 定义 + 初始化 + 赋值:T, array-name = const-exp1, const-exp2;,多维规则数组使用,int, a = new int3,4;a1,1= 10; int, a = new int,0,0,0,0,1,1,2,2,2,3,4,5; int,

14、a = 0,0,0,0,1,1,2,2,2,3,4,5;,多维数组- 不规则,定义 P38 初始化 访问数组元素 存储子数组的地址,多维不规则数组使用,int b = new int3; b0= new int 4; b1= new int3; b2= new int 2;,数组举例,using System; namespace P2_9 class MultiArraySample public static void Main() int, a = 0, 0, 1, 1 , 1, 1, 2, 2 , 2, 3, 4, 5 ; int b = new int3; b0 = new int4

15、; b1 = new int3; b2 = new int2; Console.WriteLine(规则数组); Console.WriteLine(长度: 0, a.Length); Console.WriteLine(子数组长度: 0, 1rn, a.GetLength(0), a.GetLength(1); Console.WriteLine(不规则数组); Console.WriteLine(长度: 0, 1, b.Length, b.GetLength(0); /调用b.GetLength(1)将会出错 Console.WriteLine(子数组长度: 0, 1, 2rn, b0.L

16、ength, b1.Length, b2.Length); ,a.Length与a.GetLength(0)都是数组第一维的长度,不能用其它整数调用GetLength方法。,C#程序设计基础,$3 成员、变量和常量,成员类型,字段 方法 嵌套成员,字段,字段存储类所需要的数据。 可以是值类型,也可以是引用类型; 可以是系统预定义的类型,也可以是用户自已定义的类、结构和枚举类型。 字段的命名遵循camel规则,一般为private类型。 举例 Class BankCard Public uint amount; ,方法,方法是包含一系列语句的代码块,是类或结构中用于执行计算或其它行为的成员。 访

17、问级别:public ,private等 返回类型:任何数据类型。 方法名:同一个类中唯一。 参数列表:包含在一对小括号中,多个参数间用逗号分割,不需要参数则用一对空的小括号。 方法体:大括号括起来的一段代码。 方法声明 修饰符 返回类型方法名称(形式化参数表) 方法体 ,方法-参数类型,普通参数 P52 无须特别定义 引用型参数 P53 以关键字ref定义,采用引用传递,定义与使用时均加ref 实参调用前必须先初始化。 输出型参数P53 以关键字out定义,采用引用传递,定义与使用时均加out 在方法体内必须对参数赋值,实参使用前不需要先初始化。 数组型参数P53 以关键字params定义,

18、根据实参形式选择引用传递或值传递,包含数量可变的参数。 方法中只允许定义一个数组型参数,而且该参数必须位于参数列表中最后。 数组型参数所定义的数组必须是一维数组。 数组型参数不能同时既为引用型参数又为输出型参数。,传递给数组型参数的实参可以是一个数组变量,也可以是多个数组元素变量。前者采用引用传递,后者采用值传递的方式。,参数传递种类,值传递 值传递值类型,如:void SquareIt(int x) 参数int x 是值类型。 值传递引用类型,如:void Change(int pArray) 数组pArray 为引用类型。 引用传递有以下两种类型: 引用传递值类型,如:void Squar

19、eIt(ref int x) 引用传递引用类型,如:void Change(ref int pArray),值传递值类型参数示例,class PassingValByVal static void SquareIt(int x) x *= x; System.Console.WriteLine(SquareIt方法内的n值: 0, x); static void Main() int n = 5; System.Console.WriteLine(调用SquareIt方法前的n值: 0, n); SquareIt(n); / 通过值来传递值 System.Console.WriteLine(调

20、用SquareIt方法后的n值: 0, n); ,该程序运行输出: 调用SquareIt方法前的n值: 5 SquareIt方法内的n值: 25 调用SquareIt方法后的n值: 5,值传递引用类型示例,class PassingRefByVal static void Change(int pArray) pArray0 = 888; / 将pArray的第一个元素赋值为888, 改变arr0 pArray = new int5 -3, -1, -2, -3, -4 ; / 引用新的数组,不改变arr System.Console.WriteLine(方法内的数组第一元素: 0, pArr

21、ay0); static void Main() int arr = 1, 4, 5 ; System.Console.WriteLine(调用方法前的数组第一元素:0, arr0); Change(arr); System.Console.WriteLine(调用方法后的数组第一元素:0, arr0); ,该程序运行输出: 调用方法前的数组第一元素:1 方法内的数组第一元素: -3 调用方法后的数组第一元素:888,引用传递值类型示例,class PassingValByRef / 参数X的值通过关键字ref来传递,改变x的值,将会改变输入的x的值 static void SquareIt(

22、ref int x) x *= x; System.Console.WriteLine(SquareIt方法内的n值: 0, x); static void Main() int n = 5; System.Console.WriteLine(调用SquareIt方法前的n值: 0, n); SquareIt(ref n); / 通过ref关键字来传递变量引用. System.Console.WriteLine(调用SquareIt方法后的n值: 0, n); ,该程序运行输出: 调用SquareIt方法前的n值: 5 SquareIt方法内的n值: 25 调用SquareIt方法后的n值:

23、25,引用传递引用类型示例,class PassingRefByRef static void Change(ref int pArray) / 下面两个数组赋值都将改变原始的元素 pArray0 = 888; / 将pArray的第一个元素赋值为 pArray = new int5 -3, -1, -2, -3, -4 ; / pArray 引用新的数组 System.Console.WriteLine(Change方法内的数组第一元素: 0, pArray0); static void Main() int arr = 1, 4, 5 ; System.Console.WriteLine(

24、调用Change方法前的数组第一元素:0, arr0); Change(ref arr);/通过ref关键字来传递数组引用 System.Console.WriteLine(调用Change方法后的数组第一元素:0, arr0); ,该程序运行输出: 调用Change方法前的数组第一元素:1 Change方法内的数组第一元素: -3 调用Change方法后的数组第一元素:-3,数组型参数示例 P54,/程序清单P3_2.cs: using System; namespace P3_2 class ArrayParametersSample public static void Main() d

25、ouble d1 = 1; double d2 = 5; double d3 = 3; double ds = 1, 5, 3 ; CzMath c = new CzMath(); Console.Write(值传递排序: ); c.Sort(d1, d2, d3); Console.WriteLine(0 1 2, d1, d2, d3); Console.Write(引用传递排序: ); c.Sort(ds); Console.WriteLine(0 1 2, ds0, ds1, ds2); ,class CzMath /交换两个数的值 public void Swap(ref doubl

26、e x, ref double y) double temp = x; x = y; y = temp; /对三个数进行排序 public void Sort(params double array) if (array.Length != 3) return; if (array0 array1) Swap(ref array0, ref array1); if (array1 array2) Swap(ref array1, ref array2); if (array0 array1) Swap(ref array0, ref array1); ,方法-标识与重载,方法标识 方法名 参数

27、列表(参数数量与参数类型) 返回值? 方法重载 方法名相同 参数列表不同,嵌套成员,一个程序集或命名空间中的复合类型可以并列定义也可以嵌套定义,二者之间的区别是访问限制的不同。采用嵌套定义时,外部的其他类对嵌套类型的使用将受到限制。 只有将嵌套类型的访问限制修饰符设置为public,外部定义的其他类才能使用该类中的嵌套类型。,3.2 成员访问限制,访问限制修饰符 私有privateP57 限制为私有的,访问仅限于包含类型。 用于修饰类或结构的成员 类和结构成员默认为private修饰符。 在命名空间下直接定义的类型(类、结构、接口、枚举、委托等),不允许使用private修饰符。,访问限制修饰

28、符,公有public 表示公有访问,访问不受限制。 可用于类和结构的成员。 可以用于命名空间下直接定义的类型(类、结构等) 接口(interface)和枚举(enum)成员默认为public访问修饰符,且不能显示使用修饰符。,访问限制修饰符,保护protectedP58 限制为保护访问。 只能用于类的成员 不能用于结构成员和命名空间下直接定义的类型。 在其所在类和它的派生类中的成员可以访问,而无法从类的外面访问。,访问限制修饰符,内部internal 限制为内部访问,即本程序集内可以自由访问。 可修饰类和结构的成员,也可以用于命名空间下直接定义的类型。 类(Class)的默认访问为intern

29、al。,访问限制修饰符,protected internal 同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员。 唯一的组合限制修饰符,类型默认访问表,静态成员和非静态成员,静态成员 成员属于类型本身所有,不会随具体对象的变化而变化,无论类有多少个对象,一个静态成员在内存中只有一个副本。 使用static来定义 通过类型名调用 非静态成员 属于类型的实例所有 不加static关键字 通过实例名调用,静态成员和非静态成员示例,/程序清单P3_5.cs: using System; namespace P3_5 class StaticFieldSample public s

30、tatic void Main() BankCard card1 = new BankCard(); card1.m_id = 001; card1.Query(); CreditCard card2 = new CreditCard(); card2.m_id = 002; card2.Query(); /修改静态字段 BankCard.Currency = 港币; card1.Query(); card2.Query(); ,public class BankCard public static string Currency = 人民币; /静态字段 public string m_id

31、; protected uint m_amount = 10; public void Query() Console.WriteLine(卡号0: 余额12, m_id, m_amount, Currency); public class CreditCard : BankCard ,变量,基本原则 先定义后使用! 变量命名 使用camel规则 其它要求,变量种类,静态变量 从创建类或结构的第一个实例开始存在,由所有实例共享,直到所有实例从内存中清除。 实例变量 数组元素 数值参数 引用参数 输出参数 局部变量,变量,声明 初始化 赋值,常量,常数常量const 式 只读常量readonly,C#程序设计基础,$4 操作符和表达式,操作符和表达式,操作符 一元操作符:op x 二元操作符:x op y 三元操作符:?:,

温馨提示

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

评论

0/150

提交评论