C# 常量
常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。常量可以被当作常规的变量,只是它们的值在定义后不能被修改。
整数常量整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制。整数常量也可以有后缀,可以是 U 和 L 的组合,其中,U 和 L 分别表示 unsigned 和 long。后缀可以是大写或者小写,多个后缀以任意顺序进行组合。这里有一些整数常量的实例:
212 /* 合法 /215u / 合法 /0xFeeL / 合法 /078 / 非法:8 不是一个八进制数字 /032UU / 非法:不能重复后缀 */
以下是各种类型的整数常量的实例:
85 /* 十进制 /0213 / 八进制 /0x ...
C# 属性(Property)
C# 中的属性(Property)是类和结构体中用于封装数据的成员。它们提供了一种方式来定义类成员的访问和设置规则,通常用于隐藏字段(Fields)的内部实现细节,同时提供控制数据访问的机制。属性可以看作是对字段的包装器,通常由 get 和 set 访问器组成。属性(Property)不会确定存储位置。相反,它们具有可读写或计算它们值的 访问器(accessors)。例如,有一个名为 Student 的类,带有 age、name 和 code 的私有域。我们不能在类的范围以外直接访问这些域,但是我们可以拥有访问这些私有域的属性。
基本语法public class Person{ private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}以上代码中,Name 属性封装了私有字段 name。get 访问器用于获取字段值,而 set 访问器用于设置字段值。
自动 ...
C# 封装
封装 被定义为”把一个或多个项目封闭在一个物理的或者逻辑的包中”。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象。C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现。一个 访问修饰符 定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:
public:所有对象都可以访问;private:对象本身在对象内部可以访问;protected:只有该类对象及其子类对象可以访问internal:同一个程序集的对象可以访问;protected internal:访问限于当前程序集或派生自包含类的类型。
Public 访问修饰符Public 访问修饰符允许一个类将其成员变量和成员函数暴露给其他的函数和对象。任何公有成员可以被外部的类访问。下面的实例说明了这点:
实例
using System;
namespace RectangleApplication{ class Rectangle { //成员 ...
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# 多态性多态是同一个行为具有多个不同表现形式或形态的能力。多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为”一个接口,多个功能”。多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。在 C# 中,每个类型都是多态的,因为包括用户定义类型在内的所有类型都继承自 Object。多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
现实中,比如我们按下 F1 键这个动作:
如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
静态多态性在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为:
函数重载运算符重载
运算符重载将在下一章节讨论,接下来我们将讨论函数重载。
函数重载您可以在同一个范围内对相同的函数名有多个定义。函数的定义必须彼此不同,可以是参数列表中的参数类型不同,也可以 ...
C# 多线程
线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。线程是轻量级进程。一个使用线程的常见实例是现代操作系统中并行编程的实现。使用线程节省了 CPU 周期的浪费,同时提高了应用程序的效率。到目前为止我们编写的程序是一个单线程作为应用程序的运行实例的单一的过程运行的。但是,这样子应用程序同时只能执行一个任务。为了同时执行多个任务,它可以被划分为更小的线程。
线程生命周期线程生命周期开始于 System.Threading.Thread 类的对象被创建时,结束于线程被终止或完成执行时。下面列出了线程生命周期中的各种状态:
未启动状态:当线程实例被创建但 Start 方法未被调用时的状况。就绪状态:当线程准备好运行并等待 CPU 周期时的状况。不可运行状态:下面的几种情况下线程是不可运行的:
已经调用 Sleep 方法已经调用 Wait 方法通过 I/O 操作阻塞
死亡状态:当线程已完成执行或已中止时的状况。
主线程在 C# 中,System.Threa ...
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 ...