首页 01 使用变量、操作符和表达式

01 使用变量、操作符和表达式

举报
开通vip

01 使用变量、操作符和表达式 第1章 使用变量、操作符和表达式 C#语言的语法发展经历了两个阶段。在早期版本时期,也即C# 1.2之前的版本,只支持值类型和 引用类型,并隐形地支持指针类型。尽管微软对外宣称为了安全起见,C#语言并不支持指针,但是还 是提供了unsafe模式下的指针操作。 在随着Visual Studio 2005推出的C# 2.0的语言参考手册中,基本没有对上述支持的类型进行修改, 相反增加了近年来很流行的泛型方法、匿名方法和迭代器等语言点的支持,同时还增加了对null类型 等小的语言点的支持,这些内容扩大了C#语言的范...

01 使用变量、操作符和表达式
第1章 使用变量、操作符和表达式 C#语言的语法发展经历了两个阶段。在早期版本时期,也即C# 1.2之前的版本,只支持值类型和 引用类型,并隐形地支持指针类型。尽管微软对外宣称为了安全起见,C#语言并不支持指针,但是还 是提供了unsafe模式下的指针操作。 在随着Visual Studio 2005推出的C# 2.0的语言参考手册中,基本没有对上述支持的类型进行修改, 相反增加了近年来很流行的泛型 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 、匿名方法和迭代器等语言点的支持,同时还增加了对null类型 等小的语言点的支持,这些内容扩大了C#语言的范围,也回应了很多编程人员的建议。 在未来的C# 3 .0语言 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 中,继续加强对泛型方法等语言点的支持,还增加了对扩展方法 (extention method)、λ表达式(Lambda expression)、查询表达式(query expression)和表达式树 (expression tree)等新语言点的支持,这些新语言点将在即将推出的C# 3.0规范中详述。 本章将在C# 1.2语言规范的基础上介绍掌握C#必要的基本语言点,本章内容分为三个部分,第一部 分介绍C#语言的关键字;第二部分介绍变量和数据类型;第三部分介绍运算符的优先级和使用方法。 1.1 标识符 标识符是语言的基本单位。在C#语言中标识符基本都支持Unicode 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 ,有效的标识符范例包括: “identifierl”、“_identifier1”和“@identifierl”,identifierl是标识符的意思。任何identifierl都可以作 为一个标识符而存在,如定义: string str; 在上述例子中,string代表一个字符串类型,str就是一个标识符,代表了一个字符串变量。也可 以定义成stringwhat等字符,字符的含义是由自己定义的,不过推荐使用str作为字符串变量的开头字 母,以便识别。 虽然“_identifierl”不满足Unicode标准,但是也可以作为标识符存在。比如定义为“_str”,C# 编译器也可以通过,不会报错。 “@ident i f ier l”也不满足Unicode标准,但是也可以作为标识符而存在。“@ident i f ier l”与 “_identifierl”不同的是,@的功能是将关键字定义为标识符,而不是普通的标识符都可以加上@。比 如定义为“@if”,则表示将关键字if定义为标识符被直接引用。 1.1.1 标识符的演示程序 为了演示@标识符在程序中的使用情况,下面写一个小程序验证实际的结果。 (1)打开Visual Studio 2005编辑器,单击“文件”菜单,选择“新建项目”命令,打开Visual Studio 2005编辑器的创建向导,然后选择C#语言,最后选择“控制台应用程序”,如图1.1所示。 (2)单击“确定”按钮,创建一个空的项目,并在代码页面中输入如下代码: 21 励 志 照 亮 人 生   编 程 改 变 命 运 第2章 使用变量、操作符和表达式 图1.1 新建控制台程序 using System; using System.Collections.Generic; using System.Text; namespace identifierl { class Program { static void Main(string[] args) { string str; str = Console.ReadLine().ToString(); bool @bool; if(str.Equals("true")) { @bool=true; @static(@bool); } else { @bool=false; @static(@bool); } } public static void @static(bool @bool) { if (@bool) Console.WriteLine("true"); else Console.WriteLine("false"); 22 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 Visual C# 2005 } } } 在上述代码中使用@static定义了一个成员函数的名字,而static正是一个关键字。同理,bool也表 示关键字,而@bool则表示标识符。 (3)使用快捷键“Ctrl+F5”执行程序,如图1.2所示。 (4)在黑色的窗口中输入“true”字符串,并回车,将会看到如图1.3所示的结果,这表明程序识 别了@bool赋予的值,并按照本意输出了相应的字符串。 1.1.2 解释程序 下面对这个程序的实现过程做一下解释。这个程序的主体由三部分构成:类实现、Main入口函数 和成员函数@static的实现。 在类实现的代码中,首先引用了System命名空间,这是必须引用的。接着Visual Studio 2005编辑 器还生成了两个命名空间及其成员,这两个命名空间在本示例中并没有使用。 接着代码首先命名了一个名为identifierl的命名空间,这是为了防止类program与其余类的同名而 特意增加的,这是一种好的编码习惯,读者可以效仿。至于命名空间的名字,可以根据自己的需要选 取,C#语言中并没有刻意的规定。 接下来就在program命名空间中定义了一个类Program,这是本程序中唯一的一个类,所有的函数 实现都要在类中定义和完成。 using System; using System.Collections.Generic; using System.Text; namespace identifierl { class Program { } } 23 励 志 照 亮 人 生   编 程 改 变 命 运 第2章 使用变量、操作符和表达式 图1.2 输入字符串 图1.3 控制台程序结果 所有类的入口都需要一个入口函数,一般都会被标识为Main(),并定义为如下的形式: static void Main(string[] args) { } 定义一个Main()函数需要注意以下几点: q 一定要被定义为static类型,不能定义为其余类型。 q 其次,Main()函数是虚函数,即需要在前面加上void标识符。 q Main()函数的参数一般都是string[] args。 q Main()函数的函数名的第一个字母必须大写。 下面这段代码表示:程序根据读者输入的结果选择输出的结果。如果读者输入的字符串为true, 则将由@static函数根据条件为真的原则输出对应的true字符串;如果读者输入的是false,则由@static 函数根据条件为假的原则输出对应的false字符串。 string str; str = Console.ReadLine().ToString(); bool @bool; if(str.Equals("true")) { @bool=true; @static(@bool); } else { @bool=false; @static(@bool); } 其实本程序并没有对除了true之外的字符串进行判别,如果读者输入了别的字符串,程序都会输 出false,读者可以做一下实验。 1.2 标识关键字 关键字也是一种标识符,但是是一种特殊的标识符。关键字不能被直接当作标识符使用,而只能 通过@将之表示为标识符。在C#中可以使用的关键字如下所示: abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string 24 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 Visual C# 2005 struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual void volatile while 1.3 类型 C#语言的类型分为两大类:值类型和引用类型。它们的不同之处在于:值类型的变量直接包含其 数据,而引用类型的变量存储对其数据的引用(reference),后者称为对象(object)。对于引用类型, 两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类 型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量。 C#的类型系统是统一的,因此任何类型的值都可以按对象处理。C#中的每个类型直接或间接地 从object类类型派生,而object是所有类型的最终基类。引用类型的值都被当作“对象”来处理,这是 因为这些值可以简单地被视为是属于object类型。值类型的值则通过执行装箱和拆箱操作按对象来处 理的。 1.3.1 值类型 值类型有两种表现形式,一种是结构类型,另外一种是枚举类型。在C#中提供预定义的结构类型 集,这种类型集在C#中称为简单类型。简单类型通过保留字识别,如: q int q byte q short q char 上述这些保留字表示了四种常见的简单类型,按照顺序是整型、字节型、短整型、字符型。在值 类型中,变量总是要包含该类型的值,并且不能为null(空)。同时,值类型的变量赋值时会创建所赋 值的一个副本,而不是仅仅指明值的位置。 1.3.2 System.ValueType类型 System.ValueType类型是System命名空间的一个成员类型,所有的值类型都隐式继承自该类型。 同时,该类型又从类的最初形式Object继承,这就注定该类型不能直接使用,同时从其继承的值类型 也不能被直接派生,换句话说,所有的值类型都是“密封的”。根据上面的描述,下面对System. ValueType的使用是错误的: Valuetype stringcount; 这里的ValueType并不是值类型的意思,所以不能用它定义值类型;相反该类型具有Class类型 (类类型)的含义,请不要将该类型与值类型搞混。 1.3.3 默认构造函数 根据面向对象 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 的原理,所有的对象最终都将归于类中,所以对于类的构造是面向对象程序设 计中最重要的一环。 25 励 志 照 亮 人 生   编 程 改 变 命 运 第2章 使用变量、操作符和表达式 细心的读者可能注意到在前面的程序示例中曾经多次提到过“构造函数”,构造函数就是类在构 造过程中必需的初始化函数。如以下代码所示: class A { void F() { int i = 0; int j = new int(); } } 这是一个典型的构造函数,在类声明的最开始处,程序通过读取构造函数,对整个类的结构会有 一个清晰的认识,同时编译器也会自动为类生成相应的框架。编译器其后的工作都是为构造函数搭建 的框架填充内容。 通常,在很多程序中会出现一种“默认构造函数”。构造函数是类必须具备的函数,但是有时, 编程者并不需要关注构造函数,所以在类的构造中就隐式的自动生成一个构造函数,这个函数不需要 编程者去干预也会正常工作,或者仅仅作为一个“点缀”而存在,这样的构造函数就称之为“默认构 造函数”。 所有的值类型都有默认构造函数,这些默认构造函数会在调用结束后返回一个零初始化的实例, 这个值也就作为该值类型的默认值而存在。所以每个值类型都有其默认的值,对于所有的简单类型, 默认值是将其所有位都置零的位模式所形成的值: q 对于sbyte、byte、short、ushort、int、uint、long和ulong,默认值为0。 q 对于char,默认值为'\x0000'。 q 对于float,默认值为0.0f。 q 对于double,默认值为0.0d。 q 对于decimal,默认值为0.0m。 q 对于bool,默认值为false。 q 对于枚举的类型,默认值为 0。 1.3.4 结构类型 结构和类很相似,都表示可以包含数据成员和函数成员的数据结构。但是,与类不同的是,结构 是一种值类型,并且不需要堆分配。结构类型的变量直接包含了该结构的数据,而类类型的变量所包 含的只是对相应数据的一个引用(被引用的数据称为“对象”)。 结构对于具有值语义的小型的数据结构特别有用。复数、坐标系中的点或字典中的“键-值”对 都是结构的典型示例。这些数据结构的关键之处在于:数据结构只有少量数据成员,并且不要求使用 继承或引用标识,而且适合使用值语义(赋值时直接复制值而不是复制它的引用)方便地实现。 结构类型可以声明常量、字段、方法、属性、索引器、运算符、实例构造函数、静态构造函数和 嵌套类型。 1.3.5 结构类型的范例 为了更好的理解结构类型,下面做一个小的程序演示其用法。 (1)打开Visual Studio 2005编辑器,单击“文件”菜单,选择“新建项目”命令,打开Visual 26 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 Visual C# 2005 Studio 2005编辑器的创建向导,然后选择C#语言,最后选择“控制台应用程序”,如图1.4所示。 图1.4 新建结构类型演示程序 (2)在生成的空代码文件中输入如下代码: using System; using System.Collections.Generic; using System.Text; namespace @struct { class Program { struct Point { public int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } static void Main(string[] args) { Point a = new Point(10, 0); Point b = a; a.x = 100; System.Console.WriteLine(b.x); } } } (3)使用快捷键“Ctrl+F5”执行程序,如图1.5所示。 27 励 志 照 亮 人 生   编 程 改 变 命 运 第2章 使用变量、操作符和表达式 聪明的读者可能已经看出来了,这个程序实际上是一个坐标演示程序。程序定义了一个Point结构 类型,并定义了两个成员变量x和y,这两个 变量代表了坐标的横轴和纵轴。如以下代码 所示: struct Point { public int x, y; public Point(int x, int y) { this.x = x; //横轴 this.y = y; //纵轴 } } 在M a i n ( )函数中首先创建了一个新的 Point实例a,该实例已经被初始化为x和y的 值都是10,然后创建一个新的实例b,并将a的值赋予b,这时b的成员赋值是x和y均为10。最后将a的 成员赋值为100,这个并不会影响b的成员的赋值。最后程序输出b的成员x的值,可以看到这时b的成 员x依然是10。 Point a = new Point(10, 10); Point b = a; a.x = 100; System.Console.WriteLine(b.x); 1.3.6 简单类型 在C#语言中也定义了很多预定义类型,并给这些类型赋予了相应的名字,这些名字都是C#语言 的关键字。这里需要注意的是这些名字仅仅是这些类型的别名,其真正的名字往往比别名长很多,真 名与别名的对比如表1.1所示。 表1.1 简单类型的别名与真名的对比 保留字 别名的类型 保留字 别名的类型 sbyte System.SByte ulong System.UInt64 byte System.Byte char System.Char short System.Int16 float System.Single ushort System.UInt16 double System.Double int System.Int32 bool System.Boolean uint System.UInt32 decimal System.Decimal long System.Int64 因为简单类型是结构类型的别名,所以简单类型同样拥有成员。比如int类型,可以像下面的代码 这样使用: int i = int.MaxValue; string s = i.ToString(); 28 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 Visual C# 2005 图1.5 坐标程序演示效果 string t = 123.ToString(); 1.3.7 整型 C# 支持9种整型:sbyte、byte、short、ushort、int、uint、long、ulong和char,其说明如表1.2所示。 表1.2 整型的大小和取值范围 整型 大 小 取 值 范 围 sbyte 有符号8位整数 -128~127 byte 无符号8位整数 0~255 short 有符号16位整数 -32768~32767 ushort 无符号16位整数 0~65535 int 有符号32位整数 -2147483648 和~2147483647 uint 无符号 32 位整数 0~4294967295 long 有符号 64 位整数 -9223372036854775808~9223372036854775807 ulong 无符号 64 位整数 0~18446744073709551615 char 无符号 16 位整数 0~65535 1.3.8 浮点型 C#支持两种浮点型:float和double。float和double类型用32位单精度和64位双精度IEEE 754格式 来表示。 注意 IEEE 754是美国IEEE协会提出的数据类型标准。 float 类型可表示精度为7位、大约在1.5×10-45~3.4×1038之间的值。 double 类型可表示精度为15位或16位、大约在5.0×10-324~1.7×10308之间的值。 同时,IEEE 754格式还提供了以下几组值: q 正零和负零。大多数情况下,正零和负零的行为与简单的值零是相同的,但某些运算会区别对 待这两种零。 q 正无穷大和负无穷大。无穷大是由非零数字被零除的运算产生的。例如,1.0/0.0产生正无穷大, 而-1.0/0.0产生负无穷大。 q 非数字值,常缩写为NaN。NaN是由无效的浮点运算(如零被零除)产生的。 q 以s×m×2e形式表示的非零值的有限集合,其中s为1或-1,m和e由特定的浮点型确定:对于 float类型,为0 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 C#语言提供的另外一种类型—引用类型。 引用类型大致上可以分成如下几类: q 类类型 q 对象类型 q String类型 q 接口类型 q 数组类型 q 委托类型 引用类型值是对该类型的某个实例的一个引用,后者称之为对象。在引用类型中null的意义有所 不同,null兼容于所有引用类型,用来表示“没有被引用的实例”。 1.3.15 类类型 类类型定义包含数据成员、函数成员和嵌套类型的数据结构等。其中,数据成员指的是常量和字 34 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 Visual C# 2005 段,函数成员包括方法、属性、事件、索引器、运算符、实例构造函数、析构函数和静态构造函数。 同样,类类型和类一样,支持继承特性。继承是类的特性,指的是类的派生类用来扩展和专门化 基类的一种方法。C#语言中预定义了一些类类型,如表1.3所示。 表1.3 预定义的类类型 类 类 型 说 明 类 类 型 说 明 System.Object 所有其他类型的最终基类 System.Array 所有数组类型的基类 System.String C#语言的字符串类型 System.Delegate 所有委托类型的基类 System.ValueType 所有值类型的基类 System.Exception 所有异常类型的基类 System.Enum 所有枚举类型的基类 1.3.16 Object类型 在C#语言中,有一个特殊的对象类型,这就是Object类型。Object类型是所有类型的基类型,C# 中的所有类型都是从Object类派生而来。同时在C#中还有一个关键字object,这个关键字是System. Object的别名。Object类型的语法声明如下所示: [SerializableAttribute] [ComVisibleAttribute(true)] [ClassInterfaceAttribute(ClassInterfaceType.AutoDual)] public class Object C#语言通常不要求类声明从Object继承,因为继承是隐式的。由于.NET Framework中的所有类均 从Object派生,所以Object类中定义的每个方法可用于系统中的所有对象。派生类可以重写这些方法 中的某些方法,其中包括: q Equals:支持对象间的比较。 q Finalize:在自动回收对象之前执行清理操作。 q GetHashCode:生成一个与对象的值相对应的数字以支持哈希表的使用。 q ToString:生成描述类的实例的可读文本字符串。 1.3.17 Object类型的范例 下面的程序解释了Object类型的用法。在这个例子中,首先定义了派生自Object类型的类Point, 然后重写了Object的部分成员函数。 (1)打开Visual Studio 2005编辑器,单击“文件”菜单,选择“新建项目”命令,打开Visual Studio 2005编辑器的创建向导,然后选择C#语言,最后选择“控制台应用程序”,如图1.8所示。 (2)在生成的空代码文件中输入如下代码: using System; using System.Collections.Generic; using System.Text; namespace @object { public sealed class Program { 35 励 志 照 亮 人 生   编 程 改 变 命 运 第2章 使用变量、操作符和表达式 static void Main(string[] args) { // 创建一个Point类型对象 Point p1 = new Point(1, 2); // 复制并新建一个Point类型对象 Point p2 = p1.Copy(); // 将p1的引用赋值给p3 Point p3 = p1; // 对比p1和p2,如果对比不正确,输出false,反之输出true Console.WriteLine(Object.ReferenceEquals(p1, p2)); // p1和p2指向不同的位置,但是值相同,输出true Console.WriteLine(Object.Equals(p1, p2)); // p1和p3指向相同的位置,输出true Console.WriteLine(Object.ReferenceEquals(p1, p3)); //按照格式显示p1的值 Console.WriteLine("p1's value is: {0}", p1.ToString()); } } // Point 类派生自System.Object class Point { public int x, y; //定义两个全局变量 public Point(int x, int y) { this.x = x; this.y = y; } public override bool Equals(object obj) { // 判断obj和this是否指向相同的位置,如果不同则false if (obj.GetType() != this.GetType()) return false; // 如果x和y的值相同,则匹配 Point other = (Point)obj; return (this.x == other.x) && (this.y == other.y); } //返回x和y的XOR值 public override int GetHashCode() { return x ^ y; 36 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 Visual C# 2005 } // 以字符串的形式返回x和y的值 public override String ToString() { return String.Format("({0}, {1})", x, y); } // 返回point的一份复制 public Point Copy() { return (Point)this.MemberwiseClone(); } } } 图1.8 Object程序演示 (3)使用快捷键“Ctrl+F5”执行程序,结果如图1.9所示。 图1.9 Object程序演示效果 37 励 志 照 亮 人 生   编 程 改 变 命 运 第2章 使用变量、操作符和表达式 1.3.18 Object类型范例的解释 这个例子充分演示了Object类型的特性,以及从Object继承之后重写其成员函数的过程。这段代 码的精华在Point类的实现部分,在这部分中,首先声明Point派生自Object类,然后在随后的类成员函 数中重写了Object的虚函数,并实现了相应的功能。需要说明的是,Object的成员函数是不能实现任 何功能的,因为这些成员函数都被声明是虚函数,需要在派生类中重写才能实现其功能。 Class Point表示Point派生自System.Object,因为所有的类都派生自Object,所以代码简写了类实 现的头,真正的类头实现应该是如下代码: class Point::Object { } 接下来的代码,读者一定很熟悉,这段代码是类Point的构造函数,如下所示: public Point(int x, int y) { this.x = x; this.y = y; } 接着类Point实现了如下所示的Object的成员虚函数: public override bool Equals(object obj) { // 判断obj和this是否指向相同的位置,如果不同则返回false if (obj.GetType() != this.GetType()) return false; // 如果x和y的值相同,则匹配 Point other = (Point)obj; return (this.x == other.x) && (this.y == other.y); } //返回x和y的XOR值 public override int GetHashCode() { return x ^ y; } // 以字符串的形式返回x和y的值 public override String ToString() { return String.Format("({0}, {1})", x, y); } // 返回point的一份复制 public Point Copy() { return (Point)this.MemberwiseClone(); } 38 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 Visual C# 2005 在Main()函数中,需要注意下列代码: // 创建一个Point类型对象 Point p1 = new Point(1, 2); // 复制并新建一个Point类型对象 Point p2 = p1.Copy(); // 将p1的引用赋值给p3 Point p3 = p1; 这段代码体现了引用变量中的一个基本概念,即引用和复制的区别。如果是复制变量,则会将引 用类型变量的地址和变量值都复制并赋值给新变量,这就意味着原变量和新变量是完全一样的;直接 赋值则不同,如将p1赋值给p3,是将p1的地址赋值给p3,使得p3也指向p1的地址,而不是将变量的值 直接赋值给p3。 1.3.19 string类型 string类型也是继承自Object,string类型可以用来表示字符串。在C#语言中支持两种字符串形式, 一种是规则字符串,规则字符串由包含在字符串中的双引号、简单字符和转义字符组成,例如: string a = "Hello,World"; string b = "Hello \t World"; string e = "Joe said \"Hello\" to me"; string g = "\\\\server\\share\\file.txt"; string i = "one\r\ntwo\r\nthree"; 这五种表达方式输出的结果都是一样的,即只有字符串输出,其中的转义字符是不会被输出的。 另外一种字符串形式是逐字字符串。逐字字符串指的是跟在@后面的字符串、转义字符和双引号字符, 例如: string b = @"hello, world"; string d = @"hello \t world"; string f = @"Joe said ""Hello"" to me"; string h = @"\\server\share\file.txt"; string j = @"one two three"; 在逐字字符串中,对于字符的解释是逐字进行的,其中的转义字符都会输出,字符串的形式也可 以跨行输出,如上面的最后一个字符串j就是如此。 1.3.20 接口类型 一个接口定义一个协定。实现某接口的类或结构必须遵守该接口定义的协定。一个接口可以从多 个基接口继承,而一个类或结构可以实现多个接口。 在C#语言中,接口是个比较特殊的类型。接口不同于结构也不同于类,但是接口也可以实现类和 结构同样的功能。一个接口的定义与结构和类的定义是比较相似的,一个基本的接口定义如下所示: interface IControl { 39 励 志 照 亮 人 生   编 程 改 变 命 运 第2章 使用变量、操作符和表达式 void Paint(); } 可以看到声明接口的关键字是Interface,每个接口的名字之前都需要加上I的标志,表示该名称是 一个接口名称。在C#语言中有一些基接口,后来的接口都需要从这些接口中派生出来,比如定义了下 面的接口: interface ITextBox: IControl { void SetText(string text); } 那么ITextBox的基接口就是IControl,ITextBox可以继承IControl的所有成员和变量。下面举一个 例子说明接口的使用方法,在例子中使用到了.NET提供的接口类IFormattable,该接口的作用是提供 将对象的值格式化为字符串表示形式的功能,它隶属于System命名空间。 (1)打开Visual Studio 2005编辑器,单击“文件”菜单,选择“新建项目”命令,打开Visual Studio 2005编辑器的创建向导,然后选择C#语言,最后选择“控制台应用程序”,如图1.10所示。 图1.10 接口类型实现的演示 (2)在生成的空代码文件中输入如下代码: using System; using System.Collections.Generic; using System.Text; namespace Interface { public sealed class Program { static void Main(string[] args) { // 创建一个Point对象 40 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 Visual C# 2005 Point p = new Point(5, 98); // 输出p的初值 Console.WriteLine("This is my point: " + p.ToString()); // 使用正则表达式的x格式输出p的值 Console.WriteLine("The point's x value is {0:x}", p); // 使用y的格式输出p的值 Console.WriteLine("The point's y value is {0:y}", p); try { //无效的输出格式 Console.WriteLine("Invalid way to format a point: {0:XYZ}", p); } catch (FormatException e) { Console.WriteLine("The last line could not be displayed: {0}", e.Message); } } } class Point : IFormattable //继承自IFormattable { public int x, y; public Point(int x, int y) { this.x = x; this.y = y; } public override String ToString() { return ToString(null, null); } public String ToString(String format, IFormatProvider fp) { // 输出(x, y) if (format == null) return String.Format("({0}, {1})", x, y); // 返回 "x" 值 if (format == "x") return x.ToString(); //返回 "x" 值 if (format == "y") return y.ToString(); // 未知格式抛出异常 throw new FormatException(String.Format("Invalid format string: '{0}'.", format)); } } } (3)使用
本文档为【01 使用变量、操作符和表达式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_823761
暂无简介~
格式:pdf
大小:2MB
软件:PDF阅读器
页数:42
分类:互联网
上传时间:2011-09-29
浏览量:12