C# 所有关键字语法详解

C# 所有关键字语法详解

C# 是一种面向对象的编程语言,由微软公司开发,是.NET 平台的核心语言之一。C# 包含了一系列关键字,这些关键字在语言中具有特殊的含义,不能用作标识符。本文将详细介绍 C# 中的所有关键字及其语法和使用场景。

一、C# 关键字分类

C# 关键字可以分为以下几大类:

  1. ​访问修饰符关键字​
  2. ​类型关键字​
  3. ​语句关键字​
  4. ​运算符关键字​
  5. ​上下文关键字​
  6. ​其他关键字​

二、访问修饰符关键字

访问修饰符用于控制类、方法、属性等的访问级别。

关键字描述
public不限制访问,任何代码都可以访问。
private仅限于包含它的类或结构体内部访问。
protected仅限于包含它的类或派生类内部访问。
internal仅限于当前程序集内部访问。
protected internal结合 protected 和 internal,即当前程序集或派生类可以访问。
private protected仅限于当前程序集中的派生类可以访问(C# 7.2 引入)。

示例

public class MyClass
{
    private int privateField;
    protected int protectedField;
    internal int internalField;
    protected internal int protectedInternalField;
    private protected int privateProtectedField; // C# 7.2+
    public int PublicField;
}
 

三、类型关键字

类型关键字用于定义或声明数据类型。

关键字描述
bool布尔类型,值为 true 或 false
byte8 位无符号整数。
char16 位 Unicode 字符。
decimal128 位高精度十进制数。
double64 位双精度浮点数。
float32 位单精度浮点数。
int32 位有符号整数。
long64 位有符号整数。
sbyte8 位有符号整数。
short16 位有符号整数。
uint32 位无符号整数。
ulong64 位无符号整数。
ushort16 位无符号整数。
object所有类型的基类。
stringUnicode 字符串。
dynamic动态类型,运行时确定类型。
void表示方法不返回值。

示例

bool isActive = true;
byte age = 25;
char grade = 'A';
decimal price = 19.99m;
double temperature = 36.6;
float pi = 3.14f;
int count = 100;
long bigNumber = 10000000000L;
sbyte smallNumber = -128;
short shortNumber = 32767;
uint unsignedInt = 4294967295u;
ulong hugeNumber = 18446744073709551615ul;
ushort ushortNumber = 65535;
object obj = new object();
string name = "Alice";
dynamic dynamicVar = 10;
void DoSomething() { }

四、语句关键字

语句关键字用于控制程序的执行流程。

1. 控制流关键字

关键字描述
if条件语句。
else与 if 配合使用,表示条件不成立时的执行路径。
elif (C# 9.0+)否则如果,简化多层嵌套的 if-else 结构。
switch多分支选择语句。
caseswitch 语句中的分支标签。
defaultswitch 语句中的默认分支。
while循环语句,条件为真时重复执行。
do循环语句,至少执行一次,然后检查条件。
for循环语句,通常用于已知循环次数的情况。
foreach遍历集合或数组中的每个元素。
break终止最近的封闭循环或 switch 语句。
continue跳过当前循环的剩余部分,继续下一次迭代。
goto无条件跳转到指定的标签。
return从方法中返回值(如果有返回值)或简单地退出方法。
throw抛出异常。
try尝试执行代码块,可能抛出异常。
catch捕获并处理异常。
finally无论是否发生异常都会执行的代码块。
checked在检查的上下文中执行算术运算,防止溢出。
unchecked在未检查的上下文中执行算术运算,允许溢出。

示例

int number = 10;

if (number > 5)
{
    Console.WriteLine("Number is greater than 5.");
}
else if (number == 5) // C# 9.0+ 可以使用 elif
{
    Console.WriteLine("Number is equal to 5.");
}
else
{
    Console.WriteLine("Number is less than 5.");
}

switch (number)
{
    case 10:
        Console.WriteLine("Number is 10.");
        break;
    default:
        Console.WriteLine("Number is not 10.");
        break;
}

for (int i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}

foreach (var item in new int[] { 1, 2, 3 })
{
    Console.WriteLine(item);
}

try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine(ex.Message);
}
finally
{
    Console.WriteLine("This will always execute.");
}

2. 流程控制关键字(C# 9.0+)

关键字描述
=>Lambda 表达式操作符。
??空合并运算符,提供默认值。
?.空条件运算符,安全访问成员。
??=空合并赋值运算符(C# 8.0+)。
switch 表达式返回值的 switch 表达式(C# 8.0+)。

示例

int? nullableInt = null;
int value = nullableInt ?? 10; // 如果 nullableInt 为 null,则 value 为 10

string name = null;
Console.WriteLine(name?.ToUpper()); // 不会抛出异常

nullableInt ??= 20; // 如果 nullableInt 为 null,则赋值为 20

int result = number switch
{
    10 => 100,
    _ => 0
};

五、运算符关键字

运算符关键字用于执行特定的操作。

关键字描述
new创建对象实例或隐藏继承的成员。
typeof获取类型的 Type 对象。
sizeof获取值类型占用的字节数(仅在 unsafe 上下文中使用)。
checked检查算术运算是否溢出(与语句关键字相同,但也可作为运算符)。
unchecked不检查算术运算是否溢出(与语句关键字相同,但也可作为运算符)。
default获取类型的默认值。
delegate定义委托类型(C# 1.0+)。
is检查对象是否为指定类型或满足条件(C# 7.0+ 增强)。
as尝试将对象转换为指定类型,失败返回 null(C# 1.0+)。
await异步等待任务完成(C# 5.0+)。
async标记方法、lambda 表达式或匿名方法为异步(C# 5.0+)。
nameof获取变量、类型或成员的名称(C# 6.0+)。
stackalloc在堆栈上分配内存(仅在 unsafe 上下文中使用)。

示例

// 使用 new 创建对象
var person = new Person();

// 获取类型信息
Type type = typeof(Person);

// 获取默认值
int defaultValue = default(int);

// 类型检查
if (obj is string str)
{
    Console.WriteLine(str.Length);
}

// 类型转换
string strObj = obj as string;
if (strObj != null)
{
    Console.WriteLine(strObj);
}

// 异步方法
public async Task DoSomethingAsync()
{
    await Task.Delay(1000);
}

// nameof 运算符
string propertyName = nameof(Person.Name);

// stackalloc (unsafe context)
unsafe
{
    int* numbers = stackalloc int[10];
}

六、上下文关键字

上下文关键字在特定上下文中具有特殊含义,但也可以用作标识符。

关键字描述
add用于事件声明,定义添加事件处理程序的方法。
alias用于 extern alias 指令,为程序集创建别名。
ascending用于 orderby 子句,表示升序排序。
by用于查询表达式中的分组操作。
descending用于 orderby 子句,表示降序排序。
from用于查询表达式,指定数据源。
group用于查询表达式,对数据进行分组。
join用于查询表达式,连接两个数据源。
let用于查询表达式,引入范围变量。
on用于 join 子句,指定连接条件。
orderby用于查询表达式,对结果进行排序。
select用于查询表达式,选择要返回的数据。
set用于属性声明,定义设置属性值的方法。
value用于属性和事件的访问器中,表示赋值的值。
where用于查询表达式,筛选数据。
partial用于定义分部类、结构体或方法。
params用于方法参数,允许传递可变数量的参数。
ref用于按引用传递参数。
out用于方法返回多个值,通过参数输出。
in用于按引用传递参数,但保证不被修改(C# 7.2+)。
var隐式类型,编译器推断变量类型(C# 3.0+)。
when用于 catch 块中的条件过滤(C# 6.0+)或 switch 表达式中的条件(C# 8.0+)。
global用于全局命名空间别名(C# 10.0+)。

示例

// 事件声明
public event EventHandler MyEvent
{
    add { /* 添加处理程序 */ }
    remove { /* 移除处理程序 */ }
}

// 查询表达式
var query = from p in people
            where p.Age > 18
            orderby p.Name ascending
            select p;

// 分部类
public partial class MyClass { }

// 隐式类型
var number = 10; // 编译器推断为 int

// ref 和 out
void ModifyValue(ref int x)
{
    x = 20;
}

void GetValue(out int x)
{
    x = 30;
}

// params
void PrintNumbers(params int[] numbers)
{
    foreach (var num in numbers)
    {
        Console.WriteLine(num);
    }
}

七、其他关键字

关键字描述
abstract用于类或成员,表示抽象的,不能实例化或必须被重写。
base用于访问基类的成员。
bool布尔类型(已包含在类型关键字中)。
break终止循环或 switch 语句(已包含在语句关键字中)。
caseswitch 语句中的分支标签(已包含在语句关键字中)。
catch捕获异常(已包含在语句关键字中)。
checked检查算术运算是否溢出(已包含在语句关键字中)。
class定义类。
const定义常量。
continue跳过当前循环的剩余部分(已包含在语句关键字中)。
decimal十进制类型(已包含在类型关键字中)。
default默认值或 switch 语句中的默认分支(已包含在语句关键字中)。
delegate定义委托类型(已包含在运算符关键字中)。
do循环语句(已包含在语句关键字中)。
double双精度浮点类型(已包含在类型关键字中)。
else条件语句的分支(已包含在语句关键字中)。
enum定义枚举类型。
event定义事件。
explicit定义显式转换运算符。
extern表示方法在外部实现(通常与 DllImport 一起使用)。
false布尔值(已包含在类型关键字中)。
finally异常处理中的最终代码块(已包含在语句关键字中)。
fixed固定缓冲区或变量地址(仅在 unsafe 上下文中使用)。
float单精度浮点类型(已包含在类型关键字中)。
for循环语句(已包含在语句关键字中)。
foreach遍历集合(已包含在语句关键字中)。
goto无条件跳转(已包含在语句关键字中)。
if条件语句(已包含在语句关键字中)。
implicit定义隐式转换运算符。
in按引用传递参数并保证不被修改(C# 7.2+,也用于查询表达式)
int整数类型(已包含在类型关键字中)。
interface定义接口。
internal访问修饰符(已包含在访问修饰符关键字中)。
is类型检查(已包含在运算符关键字中)。
lock用于线程同步,锁定对象。
namespace定义命名空间。
new创建对象或隐藏成员(已包含在运算符关键字中)。
null表示空引用。
object所有类型的基类(已包含在类型关键字中)。
operator定义运算符重载。
out方法返回多个值(已包含在运算符关键字中)。
params可变参数(已包含在上下文关键字中)。
private访问修饰符(已包含在访问修饰符关键字中)。
protected访问修饰符(已包含在访问修饰符关键字中)。
public访问修饰符(已包含在访问修饰符关键字中)。
readonly表示字段只能在声明时或构造函数中赋值。
ref按引用传递参数(已包含在运算符关键字中)。
return从方法返回(已包含在语句关键字中)。
sbyte有符号字节类型(已包含在类型关键字中)。
sealed防止类被继承或成员被重写。
short有符号短整数类型(已包含在类型关键字中)。
sizeof获取类型大小(已包含在运算符关键字中)。
stackalloc在堆栈上分配内存(已包含在运算符关键字中)。
static表示成员属于类型而非实例。
string字符串类型(已包含在类型关键字中)。
struct定义值类型。
switch多分支选择语句(已包含在语句关键字中)。
this表示当前实例。
throw抛出异常(已包含在语句关键字中)。
true布尔值(已包含在类型关键字中)。
try异常处理(已包含在语句关键字中)。
typeof获取类型信息(已包含在运算符关键字中)。
uint无符号整数类型(已包含在类型关键字中)。
ulong无符号长整数类型(已包含在类型关键字中)。
unchecked不检查算术运算溢出(已包含在语句关键字中)。
unsafe允许不安全代码(如指针操作)。
ushort无符号短整数类型(已包含在类型关键字中)。
using用于资源管理或命名空间导入。
virtual允许成员被重写。
void表示方法不返回值(已包含在类型关键字中)。
volatile表示字段可能被多个线程同时访问,不应被编译器优化。
where泛型约束(C# 2.0+)。
while循环语句(已包含在语句关键字中)。

示例

// 抽象类
public abstract class Animal
{
    public abstract void MakeSound();
}

// 接口
public interface IFlyable
{
    void Fly();
}

// 实现接口和抽象类
public class Bird : Animal, IFlyable
{
    public override void MakeSound()
    {
        Console.WriteLine("Chirp");
    }

    public void Fly()
    {
        Console.WriteLine("Flying");
    }
}

// 枚举
public enum DaysOfWeek
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

// 结构体
public struct Point
{
    public int X;
    public int Y;

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

// 使用 using 语句管理资源
using (var stream = new FileStream("file.txt", FileMode.Open))
{
    // 使用 stream
}

// 泛型约束
public class GenericClass<T> where T : IComparable
{
    public T Max(T a, T b)
    {
        return a.CompareTo(b) > 0 ? a : b;
    }
}

八、关键字总结表

为了便于查阅,以下是 C# 关键字的分类总结表:

分类关键字
​访问修饰符​publicprivateprotectedinternalprotected internalprivate protected (C# 7.2+)
​类型​boolbytechardecimaldoublefloatintlongsbyteshortuintulongushortobjectstringdynamicvoidvar (C# 3.0+), dynamic (C# 4.0+)
​语句​ifelseelif (C# 9.0+), switchcasedefaultwhiledoforforeachbreakcontinuegotoreturnthrowtrycatchfinallycheckeduncheckedlock
​运算符​newtypeofsizeof (unsafe), checked (operator), unchecked (operator), defaultdelegateisasawaitasyncnameofstackalloc (unsafe), => (lambda), ???.??=
​上下文​addaliasascendingbydescendingfromgroupjoinletonorderbyselectsetvaluewherepartialparamsrefoutin (C# 7.2+), global (C# 10.0+)
​其他​abstractbaseclassconstcontinuedecimaldefaultdelegatedodoubleelseenumeventexplicitexternfalsefinallyfixedfloatforforeachgotoifimplicitin (C# 7.2+), intinterfaceinternalislocknamespacenewnullobjectoperatoroutparamsprivateprotectedpublicreadonlyrefreturnsbytesealedshortsizeof (unsafe), stackalloc (unsafe), staticstringstructswitchthisthrowtruetrytypeofuintulonguncheckedunsafeushortusingvirtualvoidvolatilewherewhile

通过本文的详细介绍,相信您已经对 C# 中的关键字有了全面的了解。掌握这些关键字的使用是编写高效、可维护 C# 代码的基础。建议在实际开发中结合具体场景深入学习和实践这些关键字的应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

code_shenbing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值