C# 字符串(String)在 C# 中,您可以使用字符数组来表示字符串,但是,更常见的做法是使用 string 关键字来声明一个字符串变量。string 关键字是 System.String 类的别名。创建 String 对象您可以使用以下方法之一来创建 string 对象:
通过给 String 变量指定一个字符串通过使用 String 类构造函数通过使用字符串串联运算符( + )通过检索属性或调用一个返回字符串的方法通过格式化方法来转换一个值或对象为它的字符串表示形式
下面的实例演示了这点:
实例
using System;
namespace StringApplication{ class Program { static void Main(string[] args) { //字符串,字符串连接 string fname, lname; fname = “Rowan”; lname = “Atkinson”; ...
C# 委托(Delegate)
在 C# 中,委托(Delegate) 是一种类型安全的函数指针,它允许将方法作为参数传递给其他方法。C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量,引用可在运行时被改变。委托在 C# 中非常常见,用于事件处理、回调函数、LINQ 等操作。所有的委托(Delegate)都派生自 System.Delegate 类。
声明委托(Delegate)委托是一个引用类型,它定义了一个方法签名,可以用于存储指向该签名的方法。通过委托,你可以调用其他类中的方法。委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。声明委托的语法如下:
public delegate
中文格式说明:public delegate 返回类型 委托名(参数类型 参数名, …);
例如以下代码,我们定义一个接受两个整数并返回一个整数的委托:
public delegate int MathOperation(int x, int y);以下例子的委托可被用于引用任何一个带有 ...
C# 基本语法
C# 是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中。例如,以 Rectangle(矩形)对象为例。它具有 length 和 width 属性。根据设计,它可能需要接受这些属性值、计算面积和显示细节。
让我们来看看一个 Rectangle(矩形)类的实现,并借此讨论 C# 的基本语法:实例using System;namespace RectangleApplication{ class Rectangle { // 成员变量 double length; double width; public void Acceptdetails() { length = 4.5; width = 3.5; } public double GetArea() { ...
C# 多线程
线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。线程是轻量级进程。一个使用线程的常见实例是现代操作系统中并行编程的实现。使用线程节省了 CPU 周期的浪费,同时提高了应用程序的效率。到目前为止我们编写的程序是一个单线程作为应用程序的运行实例的单一的过程运行的。但是,这样子应用程序同时只能执行一个任务。为了同时执行多个任务,它可以被划分为更小的线程。
线程生命周期线程生命周期开始于 System.Threading.Thread 类的对象被创建时,结束于线程被终止或完成执行时。下面列出了线程生命周期中的各种状态:
未启动状态:当线程实例被创建但 Start 方法未被调用时的状况。就绪状态:当线程准备好运行并等待 CPU 周期时的状况。不可运行状态:下面的几种情况下线程是不可运行的:
已经调用 Sleep 方法已经调用 Wait 方法通过 I/O 操作阻塞
死亡状态:当线程已完成执行或已中止时的状况。
主线程在 C# 中,System.Threa ...
C# 多态性多态是同一个行为具有多个不同表现形式或形态的能力。多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为”一个接口,多个功能”。多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。在 C# 中,每个类型都是多态的,因为包括用户定义类型在内的所有类型都继承自 Object。多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
现实中,比如我们按下 F1 键这个动作:
如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
静态多态性在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为:
函数重载运算符重载
运算符重载将在下一章节讨论,接下来我们将讨论函数重载。
函数重载您可以在同一个范围内对相同的函数名有多个定义。函数的定义必须彼此不同,可以是参数列表中的参数类型不同,也可以 ...
C# 命名空间(Namespace)命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。
定义命名空间命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示:
namespace namespace_name{ // 代码声明}
为了调用支持命名空间版本的函数或变量,会把命名空间的名称置于前面,如下所示:
namespace_name.item_name;
下面的程序演示了命名空间的用法:实例using System;namespace first_space{ class namespace_cl { public void func() { Console.WriteLine(“Inside first_space”); } }}namespace second ...
C# 可空类型(Nullable)C# 单问号 ? 与 双问号 ??
? 单问号用于对 int、double、bool 等无法直接赋值为 null 的数据类型进行 null 的赋值,意思是这个数据类型是 Nullable 类型的。int? i = 3;等同于:Nullable i = new Nullable(3);
int i; //默认值0int? ii; //默认值null?? 双问号用于判断一个变量在为 null 的时候返回一个指定的值。接下来我们详细说明。C# 可空类型(Nullable)C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值。例如,Nullable< Int32 >,读作”可空的 Int32”,可以被赋值为 -2,147,483,648 到 2,147,483,647 之间的任意值,也可以被赋值为 null 值。类似的,Nullable< bool > 变量可以被赋值为 true 或 fal ...
C# 变量作用域在 C# 中,变量的作用域定义了变量的可见性和生命周期。变量的作用域通常由花括号 {} 定义的代码块来确定。以下是关于C#变量作用域的一些基本规则:局部变量 在方法、循环、条件语句等代码块内声明的变量是局部变量,它们只在声明它们的代码块中可见。实例void MyMethod(){ int localVar = 10; // 局部变量 // …}// localVar 在这里不可见
块级作用域 在 C# 7及更高版本中,引入了块级作用域,即使用大括号 {} 创建的任何块都可以定义变量的作用域。实例{ int blockVar = 20; // 块级作用域 // …}// blockVar 在这里不可见
方法参数作用域 方法的参数也有其自己的作用域,它们在整个方法中都是可见的。实例void MyMethod(int parameter){ // parameter 在整个方法中可见 ...
C# 变量
一个变量只不过是一个供程序操作的存储区的名字。在 C# 中,变量是用于存储和表示数据的标识符,在声明变量时,您需要指定变量的类型,并且可以选择性地为其分配一个初始值。在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局,范围内的值可以存储在内存中,可以对变量进行一系列操作。我们已经讨论了各种数据类型。C# 中提供的基本的值类型大致可以分为以下几类:
类型举例整数类型sbyte、byte、short、ushort、int、uint、long、ulong 和 char浮点型float, double十进制类型decimal布尔类型true 或 false 值,指定的值空字符串 string空类型可为空值的数据类型
C# 允许定义其他值类型的变量,比如 enum,也允许定义引用类型变量,比如 class。这些我们将在以后的章节中进行讨论。在本章节中,我们只研究基本变量类型。
C# 4.0引入了动态类型 (dynamic),它允许在运行时推断变量的类型。这在一些特殊情况下很有用,但通常最好使用静态类型以获得更好的性能和编译时类型检查。dynamic dynami ...
C# 反射(Reflection)反射指程序可以访问、检测和修改它本身状态或行为的一种能力。程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。优缺点优点:1、反射提高了程序的灵活性和扩展性。 2、降低耦合性,提高自适应能力。 3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。 缺点: 1、性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。 2、使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。反射(Reflection)的用途反射(Reflection)有下列用途:
它允许在运行时查看特性(attribute)信息。它允许审查集合中的各种类型,以及实例化这些类型。它允许延迟绑定的方法和属性(property)。它允 ...