C# 语法速查手册:开发者必备
C# 作为微软 .NET 平台的核心语言,凭借其强大的功能、严谨的类型系统和对面向对象编程的良好支持,在企业级应用、游戏开发(Unity)、Web 开发(ASP.NET Core)等领域占据了重要地位。对于每一位 C# 开发者而言,无论资深与否,手边备一份详尽而易于检索的语法速查手册都是提升开发效率的利器。本文将为您勾勒一份 C# 语法速查手册的核心内容,助您快速回顾与掌握关键语法点。
一、基础语法与数据类型
C# 的基础语法与许多 C 族语言相似,但也有其独到之处。
1. 变量声明与初始化
“`csharp
// 声明并初始化
int age = 30;
string name = “张三”;
bool isActive = true;
double price = 99.99;
char initial = ‘A’;
// 使用 var 关键字(类型推断,编译时确定)
var count = 100; // int
var message = “Hello”; // string
“`
2. 内置数据类型
- 整型:
byte,sbyte,short,ushort,int,uint,long,ulong - 浮点型:
float,double,decimal(用于高精度财务计算) - 布尔型:
bool(true/false) - 字符型:
char(单个 Unicode 字符) - 字符串型:
string(引用类型,不可变) - 对象型:
object(所有类型的基类)
3. 常量声明
csharp
const int MaxValue = 1000;
const string AppName = "MyApplication";
二、运算符
C# 支持丰富的运算符,包括算术、关系、逻辑、位、赋值等。
1. 算术运算符
+, -, *, /, % (取模)
2. 关系运算符
==, !=, <, >, <=, >=
3. 逻辑运算符
&& (逻辑与), || (逻辑或), ! (逻辑非)
4. 赋值运算符
=, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
5. 其他常用运算符
- 三元运算符:
条件 ? 表达式1 : 表达式2; is运算符: 检查对象是否兼容指定类型as运算符: 尝试将对象转换为指定类型,失败则返回null??(空合并运算符):a ?? b,如果a不为null则返回a,否则返回b?.(空条件运算符):obj?.Property,如果obj不为null则访问其属性,否则返回null
三、控制流语句
控制程序执行的顺序。
1. 条件语句
if-else if-else
csharp
if (score >= 90) {
Console.WriteLine("优秀");
} else if (score >= 60) {
Console.WriteLine("及格");
} else {
Console.WriteLine("不及格");
}
switch语句 (支持模式匹配,C# 8.0+ 增强)
“`csharp
switch (dayOfWeek) {
case DayOfWeek.Monday:
Console.WriteLine(“星期一”);
break;
case DayOfWeek.Sunday:
case DayOfWeek.Saturday: // 多个 case 共享一个执行体
Console.WriteLine(“周末”);
break;
default:
Console.WriteLine(“工作日”);
break;
}
// C# 8.0+ switch 表达式
var result = dayOfWeek switch {
DayOfWeek.Monday => “工作日”,
DayOfWeek.Tuesday => “工作日”,
_ => “其他” // 默认值
};
“`
2. 循环语句
for循环
csharp
for (int i = 0; i < 10; i++) {
Console.WriteLine(i);
}
foreach循环 (遍历集合)
csharp
string[] names = { "Alice", "Bob", "Charlie" };
foreach (string n in names) {
Console.WriteLine(n);
}
while循环
csharp
int i = 0;
while (i < 5) {
Console.WriteLine(i++);
}
do-while循环 (至少执行一次)
csharp
int j = 0;
do {
Console.WriteLine(j++);
} while (j < 5);
-
break和continue -
break: 立即退出当前循环。 continue: 跳过当前循环的剩余部分,进入下一次迭代。
四、方法 (函数)
组织代码逻辑的基本单元。
“`csharp
// 无返回值,无参数
void PrintMessage() {
Console.WriteLine(“Hello, C#!”);
}
// 有返回值,有参数
int Add(int a, int b) {
return a + b;
}
// 带有可选参数
void Greet(string name, string greeting = “你好”) {
Console.WriteLine($”{greeting}, {name}”);
}
// 带有 out 参数 (必须在方法内赋值)
bool TryParse(string s, out int result) {
// … 解析逻辑
result = 123; // 必须赋值
return true;
}
// 带有 ref 参数 (必须在调用前初始化)
void Swap(ref int x, ref int y) {
int temp = x;
x = y;
y = temp;
}
// 表达式主体成员 (C# 6.0+)
int Multiply(int a, int b) => a * b;
“`
五、面向对象编程 (OOP)
C# 是一门纯粹的面向对象语言。
1. 类 (Class)
“`csharp
public class Person {
// 字段 (Field)
private string _name;
// 属性 (Property) - 封装字段
public int Age { get; set; } // 自动实现属性
public string Name {
get { return _name; }
set { _name = value; }
}
// 构造函数
public Person(string name, int age) {
_name = name;
Age = age;
}
// 方法
public void Introduce() {
Console.WriteLine($"大家好,我叫 {_name},今年 {Age} 岁。");
}
}
// 实例化对象
Person p = new Person(“李四”, 25);
p.Introduce();
“`
2. 继承 (Inheritance)
使用 : 继承基类。
“`csharp
public class Student : Person {
public string StudentId { get; set; }
public Student(string name, int age, string studentId) : base(name, age) {
StudentId = studentId;
}
// 重写基类方法
public override void Introduce() {
base.Introduce(); // 调用基类方法
Console.WriteLine($"我的学号是 {StudentId}。");
}
}
“`
3. 接口 (Interface)
定义一组行为规范,实现多态。
“`csharp
public interface ILogger {
void LogInfo(string message);
void LogError(string message, Exception ex);
}
public class ConsoleLogger : ILogger {
public void LogInfo(string message) {
Console.WriteLine($”[INFO] {message}”);
}
public void LogError(string message, Exception ex) {
Console.Error.WriteLine($”[ERROR] {message}: {ex.Message}”);
}
}
“`
4. 抽象类 (Abstract Class)
包含抽象成员(无实现)的类,不能直接实例化。
“`csharp
public abstract class Shape {
public abstract double Area(); // 抽象方法
public void Display() {
Console.WriteLine(“这是一个形状。”);
}
}
public class Circle : Shape {
public double Radius { get; set; }
public Circle(double radius) => Radius = radius;
public override double Area() => Math.PI * Radius * Radius;
}
“`
5. 结构体 (Struct)
值类型,通常用于表示轻量级数据结构。
csharp
public struct Point {
public int X;
public int Y;
public Point(int x, int y) {
X = x;
Y = y;
}
}
六、集合与泛型
1. 数组 (Array)
csharp
int[] numbers = new int[5]; // 声明一个包含 5 个整数的数组
numbers[0] = 10;
int[] primeNumbers = { 2, 3, 5, 7, 11 }; // 声明并初始化
2. 泛型集合 (System.Collections.Generic)
List<T>: 动态大小的列表Dictionary<TKey, TValue>: 键值对集合HashSet<T>: 不包含重复元素的集合Queue<T>: 先进先出队列Stack<T>: 后进先出栈
“`csharp
List
cities.Add(“广州”);
Dictionary
scores.Add(“Alice”, 95);
“`
3. 泛型 (Generics)
实现代码的重用和类型安全。
“`csharp
public class GenericStack
private T[] _elements = new T[10];
private int _top = -1;
public void Push(T item) {
_elements[++_top] = item;
}
public T Pop() {
return _elements[_top--];
}
}
“`
七、异常处理
使用 try-catch-finally 块处理运行时错误。
csharp
try {
int result = 10 / 0; // 会抛出 DivideByZeroException
} catch (DivideByZeroException ex) {
Console.WriteLine($"除零错误: {ex.Message}");
} catch (Exception ex) { // 捕获所有其他异常
Console.WriteLine($"发生未知错误: {ex.Message}");
} finally {
Console.WriteLine("无论是否发生异常,都会执行。");
}
八、委托 (Delegate) 与 事件 (Event)
1. 委托
类型安全的函数指针。
“`csharp
// 声明委托类型
public delegate int MathOperation(int a, int b);
public class Calculator {
public int Execute(MathOperation op, int x, int y) {
return op(x, y);
}
}
// 使用
MathOperation add = (a, b) => a + b; // Lambda 表达式
Calculator calc = new Calculator();
int sum = calc.Execute(add, 5, 3); // 8
“`
2. 事件
基于委托实现发布/订阅模式。
“`csharp
public class Button {
public event EventHandler Click; // EventHandler 是 .NET 内置委托
public void SimulateClick() {
Click?.Invoke(this, EventArgs.Empty); // 触发事件
}
}
public class MyForm {
public MyForm() {
Button btn = new Button();
btn.Click += Button_Click; // 订阅事件
btn.SimulateClick();
}
private void Button_Click(object sender, EventArgs e) {
Console.WriteLine("按钮被点击了!");
}
}
“`
九、LINQ (Language Integrated Query)
强大的数据查询能力,支持对各种数据源进行统一查询。
“`csharp
List
// 查询语法
var evenNumbersQuery = from n in numbers
where n % 2 == 0
orderby n descending
select n;
// 方法语法 (更常用)
var evenNumbersMethod = numbers.Where(n => n % 2 == 0)
.OrderByDescending(n => n)
.ToList();
foreach (var n in evenNumbersMethod) {
Console.WriteLine(n);
}
“`
十、异步编程 (Async/Await)
处理长时间运行操作,避免阻塞 UI 线程或主线程。
“`csharp
public async Task
using (HttpClient client = new HttpClient()) {
string content = await client.GetStringAsync(url); // await 异步操作
return content;
}
}
public async Task MainAsync() {
Console.WriteLine(“开始下载…”);
string data = await DownloadContentAsync(“https://www.example.com”);
Console.WriteLine(“下载完成,内容长度: ” + data.Length);
}
// 在主方法中调用
// MainAsync().GetAwaiter().GetResult();
“`
结语
这份速查手册涵盖了 C# 语言的核心语法要素,从基础数据类型到面向对象、集合、LINQ 和异步编程,这些都是 C# 开发者日常工作中不可或缺的知识。当然,C# 的演进从未停止,新的版本不断带来更简洁、高效的语法特性(如模式匹配的持续增强、记录类型、顶层语句等)。作为开发者,我们应保持学习的热情,持续关注 C# 的发展,并根据项目需求灵活运用这些语法特性,以编写出更优雅、更健壮的代码。将这份手册作为您的起点,深入探究每一个语法点背后的原理和最佳实践,您将在 C# 的世界中游刃有余。