Download presentation
Presentation is loading. Please wait.
1
C#程序设计基础 $3 成员、变量和常量
2
3.2 成员访问限制 访问限制修饰符 私有private P57 限制为私有的,访问仅限于包含类型。 用于修饰类或结构的成员
3.2 成员访问限制 访问限制修饰符 私有private P57 限制为私有的,访问仅限于包含类型。 用于修饰类或结构的成员 类和结构成员默认为private修饰符。 在命名空间下直接定义的类型(类、结构、接口、枚举、委托等),不允许使用private修饰符。
3
访问限制修饰符 公有public 表示公有访问,访问不受限制。 可用于类和结构的成员。 可以用于命名空间下直接定义的类型(类、结构等)
接口(interface)和枚举(enum)成员默认为public访问修饰符,且不能显示使用修饰符。
4
访问限制修饰符 保护protected P58 限制为保护访问。 只能用于类的成员 不能用于结构成员和命名空间下直接定义的类型。
在其所在类和它的派生类中的成员可以访问,而无法从类的外面访问。
5
访问限制修饰符 内部internal 限制为内部访问,即本程序集内可以自由访问。 可修饰类和结构的成员,也可以用于命名空间下直接定义的类型。
类(Class)的默认访问为internal。
6
访问限制修饰符 protected internal 同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员。
唯一的组合限制修饰符
7
类型默认访问表 类型 默认的成员可访问性 该成员允许的声明的可访问性 enum public 无 interface class
private public、protected、internal、private、protected internal struct public、internal、private
8
静态成员和非静态成员 静态成员 成员属于类型本身所有,不会随具体对象的变化而变化,无论类有多少个对象,一个静态成员在内存中只有一个副本。 使用static来定义 通过类型名调用 非静态成员 属于类型的实例所有 不加static关键字 通过实例名调用
9
静态成员和非静态成员示例 //程序清单P3_5.cs: using System; namespace P3_5 {
class StaticFieldSample public static void Main() BankCard card1 = new BankCard(); card1.m_id = "001"; card1.Query(); CreditCard card2 = new CreditCard(); card2.m_id = "002"; card2.Query(); //修改静态字段 BankCard.Currency = "港币"; } public class BankCard { public static string Currency = "人民币"; //静态字段 public string m_id; protected uint m_amount = 10; public void Query() Console.WriteLine("卡号{0}: 余额{1}{2}", m_id, m_amount, Currency); } public class CreditCard : BankCard
10
变量 基本原则 先定义后使用! 变量命名 使用camel规则 必须以字母开头 只能由字母、数字、下划线3种字符组成
11
变量种类 静态变量 实例变量 数组元素 数值参数 引用参数 输出参数 局部变量
从创建类或结构的第一个实例开始存在,由所有实例共享,直到所有实例从内存中清除。 实例变量 类或结构的非静态字段,每创建一个类或结构的实例,就会为每一个非静态的字段创建一个实例变量。 数组元素 类似于数组的实例变量,随着数组实例变量的存在而存在。 数值参数 以值传递方式传递给方法的参数。 引用参数 用关键字ref声明的、以引用传递方式传递给方法的参数。 输出参数 用关键字out声明的、以引用传递方式传递给方法的参数。 局部变量 指在一个独立的程序块中声明的变量,它只在该范围内有效。
12
变量初始化 静态变量 数组 数值参数和引用参数 输出参数 局部变量
可以在类或结构的定义中给字段初始化一个默认值,也可以在创建类或结构的实例时为字段赋值。否则编译器会自动为字段赋默认值。 数组 在声明时对各元素初始化,否则为默认值。 数值参数和引用参数 由实参所在的变量完成 输出参数 在方法的执行代码中完成对参数的赋值 局部变量 如果不进行初始化,变量不会获得类型的默认值,因此使用前必须进行赋值。
13
变量示例 //程序清单P3_6.cs: using System; namespace P3_6 { class VariableInitiationSample static void Main() double x; double sum; CzMath.Output(out sum, 1, 2.5, 5); //错误:x尚未初始化 //CzMath.Output(out sum, 2, 2.25, x); x = sum; CzMath.Output(out sum, 6.25, 12.5, x); } class CzMath //交换两个数的值 public static void Swap(ref double x, ref double y) double temp = x; x = y; y = temp; //排序输出三个数并求和 public static void Output(out double sum, params double[] array) { sum = 0; if (array.Length != 3) return; sum = array[0] + array[1] + array[2]; if (array[0] < array[1]) Swap(ref array[0], ref array[1]); if (array[1] < array[2]) Swap(ref array[1], ref array[2]); Console.WriteLine("{0} {1} {2}", array[0], array[1], array[2]); Console.WriteLine(sum); }
14
常量 常数常量 只读常量 用关键字const定义 定义时必须赋值,编译时字段的值就确定 每一个实例共享这个常量,类似静态变量
不允许再用关键字static修饰 只读常量 用关键字readonly定义 可在定义时赋值,也可以类或结构的构造函数中初始化 只读常量的值在程序运行中首次使用时才确定。 只读常可以是静态的,也可以是非静态的,取决于是否使用static关键字
15
常量示例 //程序清单P3_7.cs: using System; namespace P3_7 {
class ConstVariableSample static void Main() Console.WriteLine("Pi = " + CzMath.Pi); CzMath c1 = new CzMath(); Console.WriteLine("c1: x={0} y={1}", c1.x, CzMath.y); CzMath c2 = new CzMath(); Console.WriteLine("c2: x={0} y={1}", c2.x, CzMath.y); } class CzMath { private const double Zero = 0; public const double Pi = ; public readonly int x; public static readonly int y; private static readonly Random rand = new Random(); static CzMath() y = rand.Next(System.DateTime.Now.Millisecond); } public CzMath() x = rand.Next(y);
Similar presentations