C#笔记(26)正则表达式
正则表达式正则表达式 是一种匹配输入文本的模式。 .Net 框架提供了允许这种匹配的正则表达式引擎。 模式由一个或多个字符、运算符和结构组成。 如果你还不理解正则表达式可以阅读菜鸟编程的正则表达式 - 教程。 定义正则表达式下面列出了用于定义正则表达式的各种类别的字符、运算符和结构。 字符转义 字符类 定位点 分组构造 限定符 反向引用构造 备用构造 替换 杂项构造 字符转义正则表达式中的反斜杠字符(\)指示其后跟的字符是特殊字符,或应按原义解释该字符。 下表列出了转义字符: 转义字符 描述 模式 匹配 \a 与报警 (bell) 符 \u0007 匹配。 \a “Warning!” + ‘\u0007’ 中的 “\u0007” \b 在字符类中,与退格键 \u0008 匹配。 [\b]{3,} “\b\b\b\b” 中的 “\b\b\b\b” \t 与制表符 \u0009 匹配。 (\w+)\t “Name\tAddr\t” 中的 “Name\t” 和 “Addr\t” \r 与回车符 \u000D 匹配。(\r 与换行符 \n 不是等效的。) \r...
C#笔记(25)预处理器指令
C# 预处理器指令预处理器指令指导编译器在实际编译开始之前对信息进行预处理。 所有的预处理器指令都是以 # 开始。且在一行上,只有空白字符可以出现在预处理器指令之前。预处理器指令不是语句,所以它们不以分号(;)结束。 C# 编译器没有一个单独的预处理器,但是,指令被处理时就像是有一个单独的预处理器一样。在 C# 中,预处理器指令用于在条件编译中起作用。与 C 和 C++ 不同的是,它们不是用来创建宏。一个预处理器指令必须是该行上的唯一指令。 C# 预处理器指令列表下表列出了 C# 中可用的预处理器指令: 预处理器指令 描述 #define 它用于定义一系列成为符号的字符。 #undef 它用于取消定义符号。 #if 它用于测试符号是否为真。 #else 它用于创建复合条件指令,与 #if 一起使用。 #elif 它用于创建复合条件指令。 #endif 指定一个条件指令的结束。 #line 它可以让您修改编译器的行数以及(可选地)输出错误和警告的文件名。 #error 它允许从代码的指定位置生成一个错误。 #warning 它允许从代码的...
C#笔记(24)命名空间(Namespace)
命名空间(Namespace)命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。 我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。 定义命名空间命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示: 1234namespace namespace_name{ // 代码声明} 为了调用支持命名空间版本的函数或变量,会把命名空间的名称置于前面,如下所示: 1namespace_name.item_name; 下面的程序演示了命名空间的用法: 实例1234567891011121314151617181920212223242526272829303132using System;namespace first_space{ class namespace_cl { public void func() ...
C#笔记(23)接口(Interface)
接口(Interface)接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。 接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。 接口使得实现接口的类或结构在形式上保持一致。 抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。 接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。 抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类。 定义接口: MyInterface.cs接口使用 interface 关键字声明,它与类的声明类似。接口声明默认是 public 的。下面是一个接口声明的实例: 1234interface IMyInterface{ void MethodToImplement();} 以上代码定义了接口 IMyInterface。通常接口命令以 I 字母开头,这个接口只有一个方法 MethodToImp...
C#笔记(22)运算符重载
C# 运算符重载您可以重定义或重载 C# 中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。 例如,请看下面的函数: 12345678public static Box operator+ (Box b, Box c){ Box box = new Box(); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height; return box;} 上面的函数为用户自定义的类 Box 实现了加法运算符(+)。它把两个 Box 对象的属性相加,并返回相加后的 Box 对象。 运算符重载的实现下面的程序演示了完整的实现: 实例123456789101112131415161718192021222324252627282930313233343536...
C#笔记(21)多态性
C# 多态性多态是同一个行为具有多个不同表现形式或形态的能力。 多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为”一个接口,多个功能”。 多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。 在 C# 中,每个类型都是多态的,因为包括用户定义类型在内的所有类型都继承自 Object。 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 现实中,比如我们按下 F1 键这个动作: 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档; 如果当前在 Word 下弹出的就是 Word 帮助; 在 Windows 下弹出的就是 Windows 帮助和支持。 同一个事件发生在不同的对象上会产生不同的结果。 静态多态性在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为: 函数重载 运算符重载 运算符重载将在下一章节讨论,接下来我们将讨论函数重载。 函数重载您可以在同一个范围内对相同的函数名有多个定义。函数的定义必须彼此不同,...
C#笔记(20)继承
C# 继承继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。 当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。 继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。 基类和派生类一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。 C# 中创建派生类的语法如下: 12345678<访问修饰符> class <基类>{ ...}class <派生类> : <基类>{ ...} 假设,有一个基类 Shape,它的派生类是 Rectangle: 实例1234567891011121314151617181920212223242526272829303132333435...
C#笔记(19)类(Class)
类(Class)当你定义一个类时,你定义了一个数据类型的蓝图。这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作。对象是类的实例。构成类的方法和变量称为类的成员。 类的定义类的定义是以关键字 class 开始,后跟类的名称。类的主体,包含在一对花括号内。下面是类定义的一般形式: 12345678910111213141516171819202122<access specifier> **class** class_name{ *// member variables* <access specifier> <data type> variable1; <access specifier> <data type> variable2; ... <access specifier> <data type> variableN; *// member methods* <access specifier&g...
C#笔记(18)枚举(Enum)
C# 枚举(Enum)枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。 声明 enum 变量声明枚举的一般语法: 1234enum <enum_name>{ enumeration list }; 其中, enum_name 指定枚举的类型名称。 enumeration list 是一个用逗号分隔的标识符列表。 枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0.例如: 1enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat }; 实例下面的实例演示了枚举变量的用法: 1234567891011121314using System;public class EnumTest{ enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; static void M...
C#笔记(17)结构体(Struct)
结构体(Struct)在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。 结构体是用来代表一个记录。假设您想跟踪图书馆中书的动态。您可能想跟踪每本书的以下属性: Title Author Subject Book ID 定义结构体为了定义一个结构体,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型。 例如,您可以按照如下的方式声明 Book 结构: 1234567struct Books{ public string title; public string author; public string subject; public int book_id;}; 下面的程序演示了结构的用法: 实例1234567891011121314151617181920212223242526272829303132333435363738394041424344454647using System;using System.Te...
C#笔记(16)字符串(String)
字符串(String)在 C# 中,您可以使用字符数组来表示字符串,但是,更常见的做法是使用 string 关键字来声明一个字符串变量。string 关键字是 System.String 类的别名。 创建 String 对象您可以使用以下方法之一来创建 string 对象: 通过给 String 变量指定一个字符串 通过使用 String 类构造函数 通过使用字符串串联运算符( + ) 通过检索属性或调用一个返回字符串的方法 通过格式化方法来转换一个值或对象为它的字符串表示形式 下面的实例演示了这点: 实例1234567891011121314151617181920212223242526272829303132333435using System;namespace StringApplication{ class Program { static void Main(string[] args) { //字符串,字符串连接 string fname, lnam...
C#笔记(15)数组(Array)
数组(Array)数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。 声明数组变量并不是声明 number0、number1、…、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、…、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。 所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。 声明数组在 C# 中声明一个数组,您可以使用下面的语法: 1datatype[] arrayName; 其中, datatype 用于指定被存储在数组中的元素的类型。 [ ] 指定数组的秩(维度)。秩指定数组的大小。 arrayName 指定数组的名称。 例如: 1double[] balance; 初始化数组声明一个数组不会在内存中初始化数组。当初始化数组变量时,您可以赋值给数组。 数组是一个引用类型,所以您需要使用 new 关键字来创建数组的实例。 例如: 1...






