C# 问答C# 快速指南C# 速查表更新于 2025/6/8 22:52:17C# 速查表 提供所有基本概念的快速参考。C# 在后端编程中非常流行并且广泛应用于 Web 应用程序、桌面应用程序、面向对象编程 (OOP) 以及与 .NET 的跨平台开发提供了丰富的就业机会。学习这份速查表可以帮助你有效地准备面试和考试。阅读这份速查表学习C# 编程语言。目录1. 基本结构概述C# 的基本结构代表了编程语言的基础。该文件包含程序开始执行的主要方法。以下是 C# 的基本结构:using System; class Program { static void Main() { Console.WriteLine(Hello, World!); } }2. 注释类型注释是程序中会被编译器忽略的一部分。在 C# 中有三种声明注释的方式 -3.理解数据类型数据类型定义了存储数据的类型。它们可以分为两大类:I. 值类型值类型存储实际数据。以下是表示变量的类型列表:II.引用类型引用类型存储元素的内存地址。引用类型列表如下:4.使用变量在编程中变量可以通过保存值来存储内存位置。存储在变量中的值可以改变程序的执行。因此变量允许用户存储、修改和检索数据。int num 5; // 整数 string word Hello; // 字符串5. 使用常量在 C# 中常量是不可变的值在编译时已知在程序执行期间不会更改。const int ConstNum 21; // 常量的值始终保持不变。请注意C# 中的常量遵循 PascalCase 命名规范这意味着它以大写字母开头。6. 探索条件语句C# 中的条件语句用于控制程序的流程。它根据特定条件执行不同的代码块。// 检查第一个条件 if (condition) { /*...*/} // 如果前一个条件不成立则检查其他条件 else if (condition) { /*...*/} // 如果上述条件均不成立则执行 else 代码块 else { /*...*/} // Switch 语句用于比较单个变量与多个值 switch (variable) { case val_1: // val_1 的代码 break; default: // 如果没有匹配的案例则执行默认块 break; }7. 循环和迭代循环在特定条件下执行重复任务其中迭代器用于指示给定元素列表中元素的位置。for (int i 0; i 5; i) { /*...*/} foreach (var item in collection) { /*...*/} while (condition) { /*...*/} do { /*...*/} while (condition);8.使用数组一个数组由连续内存块中固定数量的相同类型的元素引用。// 包含 5 个元素的数组 int[] n new int[5]; // 赋值数组值 n[0] 11; n[1] 12; n[2] 13;9. 列表简介列表 是一个动态集合用于存储可变数量的相同类型元素。// 列表包 using System.Collections.Generic; class Program { static void Main() { // 来自包的列表 List num new List(); // 将元素 10 添加到列表中 num.Add(10) // 删除索引 3 处的元素 num.Remove(3) // 检查元素是否存在 num.contain(6) } }10.理解字典字典是以键值对形式存储的数据集合其中每个键都是唯一的。// 创建一个包含字符串键和整数值的字典 Dictionary ages new Dictionary(); // 将键值对添加到字典中 ages[Vivek] 25; ages[Salman] 20; ages[Arjun] 25;11. 定义方法方法是执行特定任务的代码块。这是封装的逻辑用于代码复用。public static int SubNum(int n1, int n2) { // 返回减法 return n1 - n2; }12. 类和对象概述类是指对象的结构包含属性和方法。对象是类的一个实例;可以使用 new 关键字创建。类的定义class ClassName { // 字段(属性) public dataType fieldName; // 构造函数 public ClassName(parameters) { // 初始化 } // 方法 public returnType MethodName() { // 方法代码 } }创建对象ClassName objectName new ClassName(parameters);13. 处理异常异常处理允许用户处理运行时错误而不是程序崩溃。C# 异常处理基于四个关键字:try、catch、finally 和 throw。try { // 代码可能引发异常 int result 40 / 0; // 除以零 } catch (DivideByZeroException ex) { // 此代码块用于处理异常 Console.WriteLine(Error: ex.Message); } finally { // 此代码块将始终执行 Console.WriteLine(此代码块将始终运行。); }14. 委托、事件和 Lambda 表达式委托、事件 和 Lambda 表达式 在 C# 中是事件驱动应用程序的一部分可以简化代码维护。using System; // 委托定义 public delegate void MyDelegate(); // 事件声明 event MyDelegate MyEvent; // 带有 Func 函数的 Lambda 表达式用于两个整数相加 Func add (a, b) a b; class Program { static void Main(string[] args) { // 订阅事件 MyEvent () Console.WriteLine(Event triggered!); // 触发事件 MyEvent?.Invoke(); // 使用 lambda 表达式 (Func) 将两个数字相加 int result add(5, 3); Console.WriteLine($The result of adding 5 and 3 is: {result}); } }15. LINQ(语言集成查询)简介LINQ 是 C# 中的一项功能允许用户从多个来源生成查询和数据操作。其语法类似于 SQL。using System.Linq; class Program { static void Main() { var data new[] // LINQ query var query from item in data where /* condition */ select element; } }16. 使用属性属性在程序中提供了一些附加信息。这些信息可以在运行时使用。以下是可在 C# 程序中使用的属性列表 -// 定义属性 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class MyCustomAttribute : Attribute { ... } // 应用属性 [MyCustomAttribute(This is a custom attribute)] public class MyClass { [MyCustomAttribute(This is a method attribute)] public void MyMethod() { } } // 预定义属性 [Obsolete(Use NewMethod instead)] public void OldMethod() { }17. 使用 Async 和 AwaitC# 中的 async 和 await 关键字可以轻松编写在后台运行的代码从而在执行任务时保持程序的响应。这种方法会暂停任务直至其完成(例如等待文件加载)然后平稳地继续执行。// 用于读取文件的异步方法 public static async Task ReadFileAsync(string filePath) { // 调用异步方法 return await reader.ReadToEndAsync(); }18. 字符串操作和操控字符串操控是指修改文本数据以实现所需结果的过程。C# 通过字符串类拥有丰富的内置方法。一些常见的字符串操作如下:-19. 文件输入/输出操作这是管理磁盘中文件的基本通信过程。输入和输出指的是读取和写入文件。// 从文件中读取文本 file.ReadAllText(file_eg.txt); // 将文本写入文件 file.WriteAllText(file_eg.txt, This is Tutorialspoint!); // 将文本添加到文件 file.AppendAllText(file_eg.txt, Append the text); // 检查文件是否存在 file.Exists()20. 使用日期和时间日期和时间在开发支持业务决策和流程的应用程序中发挥着重要作用。这里我们简要介绍一下日期和时间代码的用法。// 获取当前日期和时间 // 本地时间 DateTime currentDateTime DateTime.Now; // UTC 时间 DateTime utcDateTime DateTime.UtcNow; // 使用类获取日期和时间 DateTime now DateTime.Now; DateTime today DateTime.Today;21. 理解泛型泛型 的定义带有类型参数该参数允许用户创建一个带有数据类型占位符的类。public class Box { public T Value { get; set; } public Box(T value) { Value value; } }22. 可空类型及其用法可空类型是值类型中直接声明值的部分。要声明可空类型请在值类型后使用?符号。以下是示例:−// 可空整数 int? myNullableInt null; // 可空双精度数 double? myNullableDouble 3.14; // 可空布尔值 bool? myNullableBool null;23. 属性和反射属性讨论程序元素的元数据而反射允许用户在运行时检查并与元数据交互以操作查询或类型例如类型、方法和其他元素。// 应用于类的自定义属性。 [CustomAttribute] public class MyEmp { // do something } // 使用反射获取属性: Attribute[] attrs Attribute.GetCustomAttributes(typeof(MyEmp));24. 创建扩展方法创建扩展方法时无需更改源代码即可向现有类型(例如类、结构体或接口)添加新方法。此方法定义在静态类下必须声明static和this关键字来标识其第一个参数所使用的类型。此处我们以字符串反转为例进行说明。public static class StringExtensions { // 扩展方法 public static string ReverseString(this string str) { char[] charArray str.ToCharArray(); Array.Reverse(charArray); return new string(charArray); } }25. 实现依赖注入依赖注入是遵循面向对象编程 (OOPS) 技术的软件开发应用程序的一种设计模式。在此模式中类从外部源接收其依赖项而不是在内部创建它们。在此示例中Client 依赖于 IService即通过其构造函数注入。public interface IService { void Execute(); } public class Service : IService { public void Execute() Console.WriteLine(Service Executed); } public class Client { private readonly IService _service; public Client(IService service) { _service service; } public void Run() _service.Execute(); } var service new Service(); var client new Client(service); client.Run();26. 使用部分类在 C# 中部分类 允许用户将类定义、结构体或接口拆分到多个文件中。当用户需要处理更大的类或文件时此功能非常有用。第一个文件 - student_one.cspublic partial class Stu { public string Name { get; set; } }第二个文件 - student_two.cspublic partial class Stu { public int Age { get; set; } public void DisplayInfo() { Console.WriteLine($Name: {Name}, Age: {Age}); } }要点 −27. 互操作性特性C# 的互操作性特性允许用户在同一系统中设置多种编程语言。28. C# 中的匿名类型创建匿名类型时使用关键字new指定对象初始化器的属性和值。var student new { Name Tapas, Age 25 }; Console.WriteLine(person.Name); // 结果 - Tapas Console.WriteLine(person.Age); // 结果 - 2529. 使用元组元组是一种数据结构允许用户在单个对象中存储不同类型的多个值。var tuple (5, Tutorialspoint, 32.9);注意:C# 元组在 C# 7.0 及更高版本中引入。30. C# 中的模式匹配模式匹配允许用户根据特定的类型、值或结构检查对象。以下是 C# 中使用的模式列表:// 类型模式 object n1 42; if (obj is int n1) { Console.WriteLine($Integer: {n1}); } // 属性模式 var person new { Name Mary, Age 30 }; if (person is { Name: Mary, Age: 25 }) { Console.WriteLine(This is Mary and she is older than 25.); } // 常量模式 int n 25; switch (n) { case 0: Console.WriteLine(One); break; case 10: Console.WriteLine(Eight); break; default: Console.WriteLine(Other); break; } // 关系模式 int age 20; if (age is 18 and 65) { Console.WriteLine(You are an adult.); } // 逻辑模式(与、或、与非) int value 15; if (value is 10 and 20) { Console.WriteLine(The value is ranges between 10 and 20.); }31. 使用本地函数本地函数是在方法内部定义的函数仅在其作用域内使用。static void Main() { // 局部函数定义 int sub(int a, int b) { return a - b; } // 调用本地函数 int result sub(10, 5); }32. 记录简介记录 是 C# 9.0 中引入的不可变数据模型。其主要用途是存储和比较数据而不是修改数据。public record record_name(string Name, int Age, ...);33. 使用 with 表达式在 C# 中with表达式用于通过复制现有对象并修改特定属性来创建新对象。var New_object Existing_object with { property_name new_value };34. 索引器和范围概述索引器类似于数组可以按顺序收集元素。int[] numbers { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // 访问索引 2 到 4 之间的元素(例如范围) var range numbers[2..5]; // 获取索引 0 到 3 之间的元素 var range2 numbers[..4];35. 理解 using 声明C# 中的using声明指的是文件或流等资源。此声明确保资源在程序使用完毕后已关闭并可供重用。// 文件在作用域结束时自动关闭。 using var file new FileStream(file_example.txt, FileMode.Open);36.可空引用类型 (NRT)有两种方法可以识别 NRT -// 非可空引用类型 string name null; // 编译器错误因为不允许为空 // 可空引用类型 string? name null;37. 基于模式的Using特性C# 中的using 语句确保正确处理实现 IDisposable 接口的对象无论是同步还是异步。我们可以将这些特性与文件处理过程联系起来。using (FileStream fileStream new FileStream(path)) { // do something }38. 默认接口实现默认接口功能允许用户在不破坏现有实现的情况下向接口添加新方法。如下所示:public interface IExample { // 默认接口的实现 void SayHello() { Console.WriteLine(Hello from the default interface implementation!); } }39. C# 中的动态绑定在 C# 中动态绑定 是指在运行时(而非编译时)解析方法调用、属性或操作的过程。此功能通过 dynamic 实现。简单来说我们可以说在运行时进行类型检查。dynamic ob Hello // 此操作在运行时解析 Console.WriteLine(ob.Length); // 由于整数不具备 Length 属性因此在运行时抛出错误 ob 23C# 问答C# 快速指南