Learning Path
浏览 C# 相关教程与章节。
主流编程语言、数据结构、设计模式、正则与基础算法。
教程
69
C# for/foreach 循环 C# 循环 一个 for 循环是一个允许您编写一个执行特定次数的循环的重复控制结构。 语法 C# 中 for 循环的语法: for ( init; condition; increment ) { statement(s); } 下面是 for 循环的控制流: init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个..
C# 泛型(Generic) 泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。 您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。下面这个简单的实例将有助于您理解这个概念: 实例 [mycode4 type='csharp&#..
C# 哈希表(Hashtable) C# 集合 在 C# 中,哈希表(Hashtable) 是一种以键值对(key=>value)形式存储数据的集合,键和值可以是任意对象。 哈希表中的每一项都有一个key=>value对,key 用于访问集合中的项目。 哈希表基于哈希算法组织和访问数据,提供高效的查找、插入和删除操作。Hashtable 是非泛型集合,位于命名空间 System.Collectio..
C# if...else 语句 C# 判断 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。 语法 C# 中 if...else 语句的语法: if(boolean_expression) { /* 如果布尔表达式为真将执行的语句 */ } else { /* 如果布尔表达式为假将执行的语句 */ } 如果布尔表达式为 true,则执行 if 块内的代码。如果布尔表达式..
C# if 语句 C# 判断 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。 语法 C# 中 if 语句的语法: if(boolean_expression) { /* 如果布尔表达式为真将执行的语句 */ } 如果布尔表达式为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,则 if 语句结束后的第一组代码(闭括号后)将被执行。 流程图 实例 实例 [mycode..
C# 索引器(Indexer) 索引器(Indexer) 允许一个对象可以像数组一样使用下标的方式来访问。 当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。您可以使用数组访问运算符 [ ] 来访问该类的的成员。 语法 一维索引器的语法如下: [mycode4 type='csharp'] element-type this[int index] { // ..
C# 继承 继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。 当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。 继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺..
C# 接口(Interface) 接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。 接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。 接口使得实现接口的类或结构在形式上保持一致。 抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。 接..
C# 简介 C#(读作'C Sharp')是一门由微软开发的编程语言。 C# 诞生于 2000 年前后,由微软工程师 Anders Hejlsberg 主导设计。 C# 是一门面向对象的语言。你可以把面向对象理解为一种思维方式:把现实世界中的事物(比如一个用户、一辆汽车、一个订单)抽象成代码里的对象,再通过操作这些对象来完成各种任务,这种方式让代码更贴近真实业务逻辑,也更容易维护和扩展。 时至今日,C# 已经过..
C# 交错数组 C# 数组 交错数组是数组的数组。 交错数组是一维数组。 您可以声明一个带有 int 值的交错数组 scores,如下所示: int [][] scores; 声明一个数组不会在内存中创建数组。创建上面的数组: int[][] scores = new int[5][]; for (int i = 0; i < scores.Length; i++) { scores[i] = new int..
C# 循环 有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。 编程语言提供了允许更为复杂的执行路径的多种控制结构。 循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式: 循环类型 C# 提供了以下几种循环类型。点击链接查看每个类型的细节。 循环类型描述 while 循环当给定条件为真时,重复语句或语句组。它会在执行循环主..
C# 方法(Methods) 方法(Method)是将一组相关语句组织在一起、用来执行特定任务的代码块。它是 C# 中实现代码复用和逻辑封装的核心机制。每一个 C# 程序至少有一个 Main 方法作为程序入口。 使用方法需要两步:定义方法和调用方法。 1. 定义方法 C# 中定义方法的基本语法如下: () { 方法体 } 方法由以下几个元素组成: 访问修饰符(Access Modifier):控制方法的..
C# 多维数组 C# 数组 C# 支持多维数组。多维数组又称为矩形数组。 您可以声明一个 string 变量的二维数组,如下: string [,] names; 或者,您可以声明一个 int 变量的三维数组,如下: int [ , , ] m; 二维数组 多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。 一个二维数组可以被认为是一个带有 x 行和 y 列的表格。下面是一个二维数组,包含..
C# 多线程 线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。 线程是轻量级进程。一个使用线程的常见实例是现代操作系统中并行编程的实现。使用线程节省了 CPU 周期的浪费,同时提高了应用程序的效率。 到目前为止我们编写的程序是一个单线程作为应用程序的运行实例的单一的过程运行的。但是,这样子应用程序同时只能执行一个..
C# 命名空间(Namespace) 命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。 我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。 定义命名空间 命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示: [mycode4 t..
C# 嵌套 if 语句 C# 判断 在 C# 中,嵌套 if-else 语句是合法的,这意味着您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。 语法 C# 中 嵌套 if 语句的语法: if( boolean_expression 1) { /* 当布尔表达式 1 为真时执行 */ if(boolean_expression 2) { /* 当布尔表达..
C# 嵌套循环 C# 循环 C# 允许在一个循环内使用另一个循环,下面演示几个实例来说明这个概念。 语法 C# 中 嵌套 for 循环 语句的语法: for ( init; condition; increment ) { for ( init; condition; increment ) { statement(s); } statement(s); } C# 中 嵌套 while..
C# 嵌套 switch 语句 C# 判断 您可以把一个 switch 作为一个外部 switch 的语句序列的一部分,即可以在一个 switch 语句内使用另一个 switch 语句。即使内部和外部 switch 的 case 常量包含共同的值,也没有矛盾。 语法 C# 中 嵌套 switch 语句的语法: [mycode4 type='csharp'] switch(ch1) { case &#..
C# Null 条件运算符 C# 判断 在 C# 编程中,处理 null 值是一个常见但又容易出错的任务。 传统的 null 检查代码往往冗长且繁琐,而 C# 6.0 引入的 Null 条件运算符(?. 和 ?[])极大地简化了这一过程。 Null 条件运算符是 C# 6.0 引入的一个语法糖,它允许开发者在访问对象的成员或元素之前,先检查该对象是否为 null。如果对象为 null,则整个表达式的结果为 null,而不会抛出 Nu..
C# 可空类型(Nullable) 在 C# 中,int、float、bool、DateTime 等都是值类型,它们默认必须有一个值,不能为 null: int a = null; // 编译错误:无法将 null 转换为 int 可空类型(Nullable Types) 解决了这个问题——它让值类型额外拥有一个'没有值'的状态(即 null),在处理数据库字段、API 返回值等可能缺失数据的场景中非常实用。..
C# 运算符重载 您可以重定义或重载 C# 中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。 例如,请看下面的函数: [mycode4 type='csharp'] public static Box operator+ (Box b, Box c) { ..
C# 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,分类如下: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 本教程将逐一讲解算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符及其他运算符。 算术运算符 下表显示了 C# 支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则: 运算符描述实例 +把两个操作数相加 A + B 将得..
C# 参数数组 C# 数组 有时,当声明一个方法时,您不能确定要传递给函数作为参数的参数数目。C# 参数数组解决了这个问题,参数数组通常用于传递未知数量的参数给函数。 params 关键字 在使用数组作为形参时,C# 提供了 params 关键字,使调用数组为形参的方法时,既可以传递数组实参,也可以传递一组数组元素。params 的使用格式为: public 返回类型 方法名称( params 类型名称[] 数组名称 ) ..
C# 传递数组给函数 C# 数组 在 C# 中,您可以传递数组作为函数的参数。您可以通过指定不带索引的数组名称来给函数传递一个指向数组的指针。 实例 下面的实例演示了如何传递数组给函数: 实例 [mycode4 type='csharp'] using System; namespace ArrayApplication { class MyArray { double ..