C# 类(Class)
当你定义一个类时,你定义了一个数据类型的蓝图。这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作。对象是类的实例。构成类的方法和变量称为类的成员。
类的定义类的定义是以关键字 class 开始,后跟类的名称。类的主体,包含在一对花括号内。下面是类定义的一般形式:
class class_name{ // member variables variable1; variable2; … variableN; // member methods method1(parameter_list) { // method body } method2(parameter_list) { // method body } … methodN(parameter_list) { ...
C# 类型转换在 C# 中,类型转换是将一个数据类型的值转换为另一个数据类型的过程。C# 中的类型转换可以分为两种:隐式类型转换和显式类型转换(也称为强制类型转换)。隐式类型转换隐式转换是不需要编写代码来指定的转换,编译器会自动进行。隐式转换是指将一个较小范围的数据类型转换为较大范围的数据类型时,编译器会自动完成类型转换,这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从 int 到 long,从 float 到 double 等。从小的整数类型转换为大的整数类型,从派生类转换为基类。将一个 byte 类型的变量赋值给 int 类型的变量,编译器会自动将 byte 类型转换为 int 类型,不需要显示转换。实例byte b = 10;int i = b; // 隐式转换,不需要显式转换
将一个整数赋值给一个长整数,或者将一个浮点数赋值给一个双精度浮点数,这种转换不会导致数据丢失:实例int intValue = 42;long longValue = intValue; // 隐式转 ...
C# 程序结构在我们学习 C# 编程语言的基础构件块之前,让我们先看一下 C# 的最小的程序结构,以便作为接下来章节的参考。C# Hello World 实例一个 C# 程序主要包括以下部分:
命名空间声明(Namespace declaration)一个 classClass 方法Class 属性一个 Main 方法语句(Statements)& 表达式(Expressions)注释
C# 文件的后缀为 .cs。以下创建一个 test.cs 文件,文件包含了可以打印出 “Hello World” 的简单代码:test.cs 文件代码:using System;namespace HelloWorldApplication{ class HelloWorld { static void Main(string[] args) { /* 我的第一个 C# 程序*/ Console.WriteLine(“Hello World”); Console.ReadKey(); } ...
C# 环境在这一章中,我们将讨论创建 C# 编程所需的工具。我们已经提到 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。因此,在讨论运行 C# 程序的可用工具之前,让我们先了解一下 C# 与 .Net 框架之间的关系。.Net 框架(.Net Framework).Net 框架是一个创新的平台,能帮您编写出下面类型的应用程序:
Windows 应用程序Web 应用程序Web 服务
.Net 框架应用程序是多平台的应用程序。框架的设计方式使它适用于下列各种语言:C#、C++、Visual Basic、Jscript、COBOL 等等。所有这些语言可以访问框架,彼此之间也可以互相交互。.Net 框架由一个巨大的代码库组成,用于 C# 等客户端语言。下面列出一些 .Net 框架的组件:
公共语言运行库(Common Language Runtime - CLR).Net 框架类库(.Net Framework Class Library)公共语言规范(Common Language Specification)通用类型系统(Common Type System)元数据(M ...
C# 特性(Attribute)
特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。.Net 框架提供了两种类型的特性:预定义特性和自定义特性。
规定特性(Attribute)规定特性(Attribute)的语法如下:
[attribute(positional_parameters, name_parameter = value, …)]element
特性(Attribute)的名称和值是在方括号内规定的,放置在它所应用的元素之前。positional_parameters 规定必需的信息,name_parameter 规定可选的信息。预定义特性(Attribute).Net 框架提供了三种预定义特性:
AttributeUsageConditionalObsolete
AttributeUsage预定义特性 ...
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 ...