Download presentation
Presentation is loading. Please wait.
1
C#程序设计基础 $3 成员、变量和常量
2
成员类型 字段 方法 嵌套成员
3
字段 字段存储类所需要的数据。 字段的命名遵循camel规则,一般为private类型。 举例 可以是值类型,也可以是引用类型;
可以是系统预定义的类型,也可以是用户自已定义的类、结构和枚举类型。 字段的命名遵循camel规则,一般为private类型。 举例 Class BankCard { Public uint amount; }
4
方法 方法是包含一系列语句的代码块,是类或结构中用于执行计算或其它行为的成员。 方法声明
访问级别:public ,private等 返回类型:任何数据类型。 方法名:同一个类中唯一。 参数列表:包含在一对小括号中,多个参数间用逗号分割,不需要参数则用一对空的小括号。 方法体:大括号括起来的一段代码。 方法声明 [修饰符] [返回类型]方法名称(形式化参数表) { 方法体 }
5
方法-参数类型 普通参数 P52 引用型参数 P53 输出型参数 P53 数组型参数 P53 无须特别定义
以关键字ref定义,采用引用传递,定义与使用时均加ref 实参调用前必须先初始化。 输出型参数 P53 以关键字out定义,采用引用传递,定义与使用时均加out 在方法体内必须对参数赋值,实参使用前不需要先初始化。 数组型参数 P53 以关键字params定义,根据实参形式选择引用传递或值传递,包含数量可变的参数。 方法中只允许定义一个数组型参数,而且该参数必须位于参数列表中最后。 数组型参数所定义的数组必须是一维数组。 数组型参数不能同时既为引用型参数又为输出型参数。 传递给数组型参数的实参可以是一个数组变量,也可以是多个数组元素变量。前者采用引用传递,后者采用值传递的方式。
6
参数传递种类 值传递 引用传递有以下两种类型: 值传递值类型,如:void SquareIt(int x) 参数int x 是值类型。
值传递引用类型,如:void Change(int[] pArray) 数组pArray 为引用类型。 引用传递有以下两种类型: 引用传递值类型,如:void SquareIt(ref int x) 引用传递引用类型,如:void Change(ref int[] pArray)
7
值传递值类型参数示例 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("调用SquareIt方法后的n值: {0}", n); 该程序运行输出: 调用SquareIt方法前的n值: 5 SquareIt方法内的n值: 25 调用SquareIt方法后的n值: 5
8
值传递引用类型示例 class PassingRefByVal{ static void Change(int[] pArray) {
pArray[0] = 888; // 将pArray的第一个元素赋值为888, 改变arr[0] pArray = new int[5] { -3, -1, -2, -3, -4 }; // 引用新的数组,不改变arr System.Console.WriteLine("方法内的数组第一元素: {0}", pArray[0]); } static void Main() { int[] arr = { 1, 4, 5 }; System.Console.WriteLine("调用方法前的数组第一元素:{0}", arr[0]); Change(arr); System.Console.WriteLine("调用方法后的数组第一元素:{0}", arr[0]); 该程序运行输出: 调用方法前的数组第一元素:1 方法内的数组第一元素: -3 调用方法后的数组第一元素:888
9
引用传递值类型示例 class PassingValByRef {// 参数X的值通过关键字ref来传递,改变x的值,将会改变输入的x的值
static void SquareIt(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值: 25
10
引用传递引用类型示例 class PassingRefByRef{ static void Change(ref int[] pArray)
{ // 下面两个数组赋值都将改变原始的元素 pArray[0] = 888; // 将pArray的第一个元素赋值为 pArray = new int[5] { -3, -1, -2, -3, -4 }; // pArray 引用新的数组 System.Console.WriteLine("Change方法内的数组第一元素: {0}", pArray[0]); } static void Main() { int[] arr = { 1, 4, 5 }; System.Console.WriteLine("调用Change方法前的数组第一元素:{0}", arr[0]); Change(ref arr);//通过ref关键字来传递数组引用 System.Console.WriteLine("调用Change方法后的数组第一元素:{0}", arr[0]); 该程序运行输出: 调用Change方法前的数组第一元素:1 Change方法内的数组第一元素: -3 调用Change方法后的数组第一元素:-3
11
数组型参数示例 P54 class CzMath { //程序清单P3_2.cs: //交换两个数的值 using System;
public void Swap(ref double x, ref double y) double temp = x; x = y; y = temp; } //对三个数进行排序 public void Sort(params double[] array) if (array.Length != 3) return; if (array[0] < array[1]) Swap(ref array[0], ref array[1]); if (array[1] < array[2]) Swap(ref array[1], ref array[2]); //程序清单P3_2.cs: using System; namespace P3_2 { class ArrayParametersSample public static void Main() double 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}", ds[0], ds[1], ds[2]); }
12
方法-标识与重载 方法标识 方法名 参数列表(参数数量与参数类型) 返回值?? 方法重载 方法名相同 参数列表不同
13
嵌套成员 一个程序集或命名空间中的复合类型可以并列定义也可以嵌套定义,二者之间的区别是访问限制的不同。采用嵌套定义时,外部的其他类对嵌套类型的使用将受到限制。 只有将嵌套类型的访问限制修饰符设置为public,外部定义的其他类才能使用该类中的嵌套类型。
Similar presentations