C# 泛型(Generic)
泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。下面这个简单的实例将有助于您理解这个概念:实例using System;using System.Collections.Generic;
namespace GenericApplication{ public class MyGenericArray { private T[] array; public MyGenericArray(int size) { array = new T[size + 1]; } public T getItem(int index) { return array[index]; ...
C# 正则表达式正则表达式 是一种匹配输入文本的模式。.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\n(\w+)”\r\nHello\nWorld.” 中的 “\r\nHello”\v与垂直 ...
C# 方法
一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。每一个 C# 程序至少有一个带有 Main 方法的类。要使用一个方法,您需要:
定义方法调用方法
C# 中定义方法当定义一个方法时,从根本上说是在声明它的结构的元素。在 C# 中,定义方法的语法如下:
(Parameter List){ Method Body}
下面是方法的各个元素:
Access Specifier:访问修饰符,这个决定了变量或方法对于另一个类的可见性。Return type:返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果方法不返回任何值,则返回类型为 void。Method name:方法名称,是一个唯一的标识符,且是大小写敏感的。它不能与类中声明的其他标识符相同。Parameter list:参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类型、顺序和数量。参数是可选的,也就是说,一个方法可能不包含参数。Method body:方法主体,包含了完成任务所需的指令集。
实例下面的代码片段显示一个函数 FindMax,它接 ...
C# 文件的输入与输出
一个 文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合。当打开文件进行读写时,它变成一个 流。从根本上说,流是通过通信路径传递的字节序列。有两个主要的流:输入流 和 输出流。输入流用于从文件读取数据(读操作),输出流用于向文件写入数据(写操作)。
C# I/O 类System.IO 命名空间有各种不同的类,用于执行各种文件操作,如创建和删除文件、读取或写入文件,关闭文件等。下表列出了一些 System.IO 命名空间中常用的非抽象类:
I/O 类描述BinaryReader从二进制流读取原始数据。BinaryWriter以二进制格式写入原始数据。BufferedStream字节流的临时存储。Directory有助于操作目录结构。DirectoryInfo用于对目录执行操作。DriveInfo提供驱动器的信息。File有助于处理文件。FileInfo用于对文件执行操作。FileStream用于文件中任何位置的读写。MemoryStream用于随机访问存储在内存中的数据流。Path对路径信息执行操作。StreamReader用于从字节流中 ...
C# 数组(Array)
数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。声明数组变量并不是声明 number0、number1、…、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、…、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。
声明数组在 C# 中声明一个数组,您可以使用下面的语法:
datatype[] arrayName;
其中,
datatype 用于指定被存储在数组中的元素的类型。[ ] 指定数组的秩(维度)。秩指定数组的大小。arrayName 指定数组的名称。
例如:
double[] balance;
初始化数组声明一个数组不会在内存中初始化数组。当初始化数组变量时,您可以赋值给数组。数组是一个引用类型,所以您需要使用 new 关键字来创建数组的实例。例如:
double[] bala ...
C# 数据类型
在 C# 中,变量分为以下几种类型:
值类型(Value types)引用类型(Reference types)指针类型(Pointer types)
值类型(Value types)值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。值类型直接包含数据。比如 int、char、float,它们分别存储数字、字符、浮点数。当您声明一个 int 类型时,系统分配内存来存储值。下表列出了 C# 2010 中可用的值类型:
类型描述范围默认值bool布尔值True 或 FalseFalsebyte8 位无符号整数0 到 2550char16 位 Unicode 字符U +0000 到 U +ffff’\0’decimal128 位精确的十进制值,28-29 有效位数(-7.9 x 1028 到 7.9 x 1028)/ 100 到 280.0Mdouble64 位双精度浮点型(+/-)5.0 x 10-324 到 (+/-)1.7 x 103080.0Dfloat32 位单精度浮点型-3.4 x 1038 到 ...
C# 教程
C# 是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。本教程将告诉您基础的 C# 编程,同时将向您讲解 C# 编程语言相关的各种先进理念。现在开始学习 C#!C# 在线工具
谁适合阅读本教程?本教程有助于初学者理解基础的 C# 编程。在学习完本教程后,您将到达一个中级的 C# 编程水平。阅读本教程前,您需要了解的知识:C# 编程是基于 C 和 C++ 编程语言的,因此如果您对 C 和 C++ 编程有基本的了解,将有助于您学习 C# 编程语言。编译/执行 C# 程序菜鸟教程提供了在线的 C# 在线编译环境,您只需进行简单的点击动作,即可在高端的服务器上体验真实的编程经验。这是完全免费的在线工具。
实例
using System;namespace HelloWorldApplication{ /* 类名为 HelloWorld / class HelloWorld { / main函数 / static void Main(string[] ...
C# 接口(Interface)
接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。接口使得实现接口的类或结构在形式上保持一致。抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。
抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类。
定义接口: MyInterface.cs接口使用 interface 关键字声明,它与类的声明类似。接口声明默认是 public 的。下面是一个接口声明的实例:
interface IMyInterface{ void MethodToImplement();}
以上代码定义了接口 IMyInterface。通常接口命名以 I 字母开头,这个接口只有一个方法 MethodToImplement(),没有参数和返回值, ...
C# 循环
有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了允许更为复杂的执行路径的多种控制结构。循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:
循环类型C# 提供了以下几种循环类型。点击链接查看每个类型的细节。
循环类型描述while 循环当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。for/foreach 循环多次执行一个语句序列,简化管理循环变量的代码。do…while 循环除了它是在循环主体结尾测试条件外,其他与 while 语句类似。嵌套循环您可以在 while、for 或 do..while 循环内使用一个或多个循环。
循环控制语句循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。C# 提供了下列的控制语句。点击链接查看每个语句的细节。
控制语句描述break 语句终止 loop 或 switch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。con ...
C# 异常处理
异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。
try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。
语法假设一个块将出现异常,一个方法使用 try 和 catch 关键字捕获异常。try/catch 块内的代码为受保护的代码,使用 try/catch 语法如下所示:
try{ // 引起异常的语句}catch( ExceptionName e1 ){ // 错误处理代 ...