C# 关键字学习手记

关键字

说明

abstract

abstract 修饰符指示所修饰的内容缺少实现或未完全实现。 abstract 修饰符可用于类、方法、属性、索引器和事件。 在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。 标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。

as

可以使用as运算符执行转换的某些类型在兼容之间的引用类型或可以为null 的类型。

base

base 关键字用于从派生类中访问基类的成员:

  1. 调用基类上已被其他方法重写的方法。
  1. 指定创建派生类实例时应调用的基类构造函数。

基类访问只能在构造函数、实例方法或实例属性访问器中进行。

从静态方法中使用 base 关键字是错误的。

所访问的基类是类声明中指定的基类。

bool

bool 关键字是 System. Boolean 的别名。它用于声明变量来存储布尔值 true 和 false。

如果需要一个也可以有 null 值的布尔型变量,请使用 bool?。

break

break 语句用于终止最近的封闭循环或它所在的 switch 语句。 控制传递给终止语句后面的语句(如果有的话)。

byte

byte 关键字代表一种整型,该类型按下表所示存储值:0 到 255、无符号 8 位整数

case

switch 语句是一个控制语句,选择“开关部分” 从候选列表中执行。

每个开关部分包含一个或多个 用例标签 和含有一个或多个语句的列表。

catch

try-catch 语句由一个 try 块后跟一个或多个 catch 子句构成,这些子句指定不同的异常处理程序。

引发异常时,公共语言运行时 (CLR) 会查找处理此异常的 catch 语句。 如果当前执行的方法不包含这样的 catch 块,则 CLR 会查看调用当前方法的方法,然后会遍历调用堆栈。 如果找不到 catch 块,则 CLR 会向用户显示一条有关未经处理的异常的消息并停止执行程序。

try 块包含可能导致异常的保护代码。 该块一直执行到引发异常或成功完成为止。

char

Checked

checked 关键字用于对整型算术运算和转换显式启用溢出检查。

默认情况下,如果表达式仅包含常数值,且产生的值在目标类型范围之外,则它会导致编译器错误。 如果表达式包含一个或多个非常数值,则编译器不检测溢出。 在下面的示例中,计算赋给 i2 的表达式不会导致编译器错误。

class

const

const 关键字用于修改字段或局部变量的声明。 它指定字段或局部变量的值是常数,不能被修改。

continue

decimal

decimal 关键字表示 128 位数据类型。 同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。

default

delegate

delegate 是一种可用于封装命名或匿名方法的引用类型。 委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。

do

double

default 关键字可在 switch 语句或泛型代码中使用。

  1. switch 语句:指定默认标签。
  2. 泛型代码:指定类型参数的默认值。 这对于引用类型为 null,对于值类型为零。

else

enum

enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。

通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。 但是,还可以将枚举嵌套在类或结构中。

默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。

event

event 关键字用于在发行者类中声明事件。

explicit

explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。

转换运算符将源类型转换为目标类型。 源类型提供转换运算符。 与隐式转换不同,必须通过强制转换的方式来调用显式转换运算符。 如果转换操作可能导致异常或丢失信息,则应将其标记为 explicit。 这可以防止编译器无提示地调用可能产生无法预见后果的转换操作。

extern

extern 修饰符用于声明在外部实现的方法。 extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 特性一起使用。 在这种情况下,还必须将方法声明为 static,如下示例所示:

[DllImport("avifil32.dll")]

private static extern void AVIFileInit();

extern 关键字在使用上比在 C++ 中有更多限制。 若要与 C++ 关键字进行比较,请参见 C++ Language Reference 中的 使用外部指定连接。

false

finally

finally 块清理在尝试分配块,并且,对于运行任何代码必须执行的所有资源非常有用,即使异常出现在块的 try 发生。 通常, finally 的语句块执行时,控件将 try 语句,控制权转换由于正常执行,的 break、 continue、 goto或 return 语句时,的执行结果是否,或者异常的发送在 try 语句外部。

在已处理的异常中,关联的 finally 块来确保运行。 但是,因此,如果异常处理, finally 的执行块依赖异常的方式展开操作将触发。 此操作,因此,依赖于计算机如何设置为。 有关更多信息,请参见 Unhandled Exception Processing in the CLR

通常,那么,当未经处理的异常关闭应用程序, finally 块是运行并不重要。 但是,因此,如果您有语句。即使在该情况必须运行的 finally 块,一个解决方案是添加 catch 块。 try-finally 语句。 或者,可以捕获 try 可能会引发块一个 try-finally 语句更高调用堆栈的异常。 即可以捕获调用方法包含 try-finally 语句,或者在方法调用该方法,或在调用堆栈上的所有方法的方法的异常。 如果未捕获, finally 的执行块取决于操作系统是否选择触发异常展开操作。

fixed

fixed 语句禁止垃圾回收器重定位可移动的变量。 fixed 语句只在 不安全的上下文中是允许的。 Fixed 还可用于创建 固定大小缓冲区。

fixed 语句设置指向托管变量的指针,并在执行该语句期间“固定”此变量。 如果没有 fixed 语句,则指向可移动托管变量的指针的作用很小,因为垃圾回收可能不可预知地重定位变量。 C# 编译器只允许在 fixed 语句中分配指向托管变量的指针。

float

for

foreach

foreach 语句对实现 System.Collections.IEnumerable 或 System.Collections.Generic.IEnumerable<T> 接口的数组或对象集合中的每个元素重复一组嵌入式语句。foreach 语句用于循环访问集合,以获取您需要的信息,但不能用于在源集合中添加或移除项,否则可能产生不可预知的副作用。 如果需要在源集合中添加或移除项,请使用 for 循环。

嵌入语句为数组或集合中的每个元素继续执行。 当为集合中的所有元素完成迭代后,控制传递给 foreach 块之后的下一个语句。

可以在 foreach 块的任何点使用 break 关键字跳出循环,或使用 continue 关键字进入循环的下一轮迭代。

foreach 循环还可以通过 goto、 return 或 throw 语句退出。

goto

if

implicit

implicit 关键字用于声明隐式的用户定义类型转换运算符。 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换。

in

foreach 语句对实现 System.Collections.IEnumerable 或 System.Collections.Generic.IEnumerable<T> 接口的数组或对象集合中的每个元素重复一组嵌入式语句。foreach 语句用于循环访问集合,以获取您需要的信息,但不能用于在源集合中添加或移除项,否则可能产生不可预知的副作用。 如果需要在源集合中添加或移除项,请使用 for 循环。

嵌入语句为数组或集合中的每个元素继续执行。 当为集合中的所有元素完成迭代后,控制传递给 foreach 块之后的下一个语句。

可以在 foreach 块的任何点使用 break 关键字跳出循环,或使用 continue 关键字进入循环的下一轮迭代。

foreach 循环还可以通过 goto、 return 或 throw 语句退出。

in(泛型修饰符)

对于泛型类型参数,in 关键字指定该类型参数是逆变的。 可以在泛型接口和委托中使用 in 关键字。

通过逆变,可以使用与泛型参数指定的派生类型相比,派生程度更小的类型。 这样可以对委托类型和实现变体接口的类进行隐式转换。 引用类型支持泛型类型参数中的协变和逆变,但值类型不支持。

在泛型接口或委托中,如果类型形参仅用作方法返回类型,而不用于方法实参,则可声明为协变的。 Ref 和 out 参数不能为变体。

如果接口具有逆变类型形参,则允许其方法接受与接口类型形参指定的派生类型相比,派生程度更小的类型的实参。 例如,由于在 .NET Framework 4 的 IComparer<T> 接口中,类型 T 是逆变的,因此如果Employee 继承 Person,则无需使用任何特殊转换方法,就可以将 IComparer(Of Person) 类型的对象指派给 IComparer(Of Employee) 类型的对象。

可以向逆变委托分配同一类型的其他委托,但需使用派生程度较小的泛型类型参数。

int

interface

接口只包含 方法、 属性、 事件或 索引器的签名。 实现接口的类或结构必须实现接口定义中指定的接口成员。 在下面的示例,类 ImplementationClass 必须实现一个不具有参数并返回 void 的名为 SampleMethod 的方法。

internal

internal 关键字是类型和类型的成员 访问修饰符。 只有在同一程序集的文件中,内部类型或成员才是可访问的。

is

检查对象是否与给定类型兼容。

lock

lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。

long

namespace

new

new 运算符

用于创建对象和调用构造函数。

new 修饰符

用于隐藏基类中被继承的成员。

new 约束

用于在泛型声明中约束可能用作类型参数的参数的类型。

null

null 关键字是表示不引用任何对象的 null 引用的文字值。 null 是引用类型变量的默认值。 普通值类型不能为 null。 但是,C# 2.0 引入了可以为 null 值的类型。

Object

object 类型在 .NET Framework 中是 Object 的别名。 在 C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从 Object 继承的。 可以将任何类型的值赋给 object 类型的变量。 将值类型的变量转换为对象的过程称为“装箱”。 将对象类型的变量转换为值类型的过程称为“取消装箱”。

operator

使用 operator 关键字来重载内置运算符,或提供类或结构声明中的用户定义转换。

out

out 上下文关键字可在下面两种上下文中使用:

  1. 作为参数列表中的 参数修饰符
  2. 在接口和委托的 泛型类型参数声明中

out(泛型修饰符)

对于泛型类型参数,out 关键字指定该类型参数是协变的。 可以在泛型接口和委托中使用 out 关键字。

通过协变,可以使用与泛型参数指定的派生类型相比,派生程度更大的类型。 这样可以对委托类型和实现变体接口的类进行隐式转换。 引用类型支持协变和逆变,但值类型不支持。

如果接口具有协变类型形参,则允许其方法返回与接口类型形参指定的派生类型相比,派生程度更大的类型的实参。 例如,由于在 .NET Framework 4 的 IEnumerable<T> 接口中,类型 T 是协变的,因此无需使用任何特殊转换方法就可以将IEnumerabe(Of String) 类型的对象分配给 IEnumerable(Of Object) 类型的对象。

可以向协变委托分配同一类型的其他委托,但需使用派生程度较大的泛型类型参数。

override

要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 override 修饰符。

params

params 关键字可以指定采用数目可变的参数的 方法参数。

可以发送参数声明中所指定类型的逗号分隔的参数列表或指定类型的参数数组。 还可以不发送参数。

在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。

private

private 关键字是一个成员访问修饰符。 私有访问是允许的最低访问级别。 私有成员只有在声明它们的类和结构体中才是可访问的。

protected

protected 关键字是一个成员访问修饰符。 受保护成员在其所在的类中可由派生类实例访问。

public

public 关键字是类型和类型成员的访问修饰符。 公共访问是允许的最高访问级别。 对访问公共成员没有限制。

readonly

readonly 关键字是可以在字段上使用的修饰符。 当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中。

ref

ref 关键字会导致通过引用传递的参数,而不是值。 通过引用传递的效果是在方法中对参数的任何改变都会反映在调用方的基础参数中。 引用参数的值与基础参数变量的值始终是一样的。

不要将“通过引用传递”概念与“引用类型”概念相混淆。 这两个概念不同。 方法参数无论是值类型还是引用类型,都可通过 ref 进行修饰。 通过引用传递值类型时没有值类型装箱。

return

sbyte

sbyte 关键字表示一种整型,该类型根据下表显示的大小和范围存储值。

-128 到 127、有符号 8 位整数。

sealed

当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承。 在下面的示例中,类 B 从类 A 继承,但是任何类都不能从类 B 继承。

class A {}    

sealed class B : A {}

short

sizeof

stackalloc

stackalloc 关键字用于不安全的代码上下文中,以便在堆栈上分配内存块。

static

string

string 类型表示一个字符序列(零个或更多 Unicode 字符)。 string 是 .NET Framework 中 String 的别名。

尽管 string 是引用类型,但定义相等运算符(== 和 !=)是为了比较 string 对象(而不是引用)的值。 这使得对字符串相等性的测试更为直观。

struct

struct 类型是一种值类型,通常用来封装小型相关变量组,例如,矩形的坐标或库存商品的特征。

switch

switch 语句是一个控制语句,用于从候选列表中选择一个要执行的开关部分。

switch 语句包含一个或多个开关部分。 每个开关部分包含一个或多个 case 标签,后接一个或多个语句。 下面的示例展示了一个包含三个开关部分的简单 switch 语句。 每个开关部分各有一个 case 标签(例如 case 1)和两个语句。

this

throw

throw 语句用于发出在程序执行期间出现反常情况(异常)的信号。

true

try

try-catch 语句由一个 try 块后跟一个或多个 catch 子句构成,这些子句指定不同的异常处理程序。

引发异常时,公共语言运行时 (CLR) 会查找处理此异常的 catch 语句。 如果当前执行的方法不包含这样的 catch 块,则 CLR 会查看调用当前方法的方法,然后会遍历调用堆栈。 如果找不到 catch 块,则 CLR 会向用户显示一条有关未经处理的异常的消息并停止执行程序。

try 块包含可能导致异常的保护代码。 该块一直执行到引发异常或成功完成为止。

typeof

uint

ulong

unchecked

unchecked 关键字用于取消整型算术运算和转换的溢出检查。

在未检查的上下文中,如果表达式产生的值在目标类型范围之外,并不会标记溢出。 例如,下例中的计算在 unchecked 块或表达式中执行,因此将忽略结果对于整数而言过大这一事实,并会对 int1 赋予值 -2,147,483,639。

unchecked

{

    int1 = 2147483647 + 10;

}

int1 = unchecked(ConstantMax + 10);

unsafe

unsafe 关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。

可以在类型或成员的声明中使用 unsafe 修饰符。 因此,类型或成员的整个正文范围均被视为不安全上下文。

ushort

using

using 关键字有两个主要用途:

  1. 作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。 请参见 using 指令。
  2. 作为语句,用于定义一个范围,在此范围的末尾将释放对象。 请参见 using 语句。

using 指令有三种用途:

允许在命名空间中使用类型,这样无需在该命名空间中限定某个类型的使用:

using System.Text;

允许访问类型的静态成员,而无需限定使用类型名称进行访问:

using static System.Math;

为命名空间或类型创建别名。 这称为 using 别名指令。

using Project = PC.MyCompany.Project;

virtual

virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。 例如,此方法可被任何继承它的类重写。

public virtual double Area()

{

    return x * y;

}

虚拟成员的实现可由派生类中的 重写成员更改。

void

volatile

volatile 关键字指示一个字段可以由多个同时执行的线程修改。 声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制。 这样可以确保该字段在任何时间呈现的都是最新的值。

volatile 修饰符通常用于由多个线程访问但不使用 lock 语句对访问进行序列化的字段。

volatile 关键字可应用于以下类型的字段:

  1. 引用类型。
  2. 指针类型(在不安全的上下文中)。 请注意,虽然指针本身可以是可变的,但是它指向的对象不能是可变的。 换句话说,您无法声明“指向可变对象的指针”。
  3. 类型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。
  4. 具有以下基类型之一的枚举类型:byte、sbyte、short、ushort、int 或 uint。
  5. 已知为引用类型的泛型类型参数。
  6. IntPtr 和 UIntPtr。

可变关键字仅可应用于类或结构字段。 不能将局部变量声明为 volatile。

while

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Benco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值