摘要本文系统梳理了 C# 中三个关键且相互关联的高级主题文件流FileStream、委托与事件Delegate Event以及线程Threading。内容涵盖基本概念、核心用法、典型场景及三者之间的协同实践旨在帮助读者构建清晰的知识脉络。文末附有思维导图供快速回顾与索引。1. 文件流 (FileStream)文件流是 System.IO 命名空间下的核心类用于对文件进行字节级别的读写操作支持同步与异步模式。1.1 核心概念与类图FileStream继承自Stream抽象类是操作文件字节流的主要入口。相关关键类包括StreamReader/StreamWriter用于文本文件的便捷读写基于编码。BinaryReader/BinaryWriter用于二进制文件的读写。File与FileInfo提供静态和实例方法用于文件管理创建、删除、移动等。1.2 基本使用模式同步读写using (FileStream fs new FileStream(test.dat, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { // 写入字节 byte[] data Encoding.UTF8.GetBytes(Hello, Stream!); fs.Write(data, 0, data.Length); // 重置位置并读取 fs.Position 0; byte[] buffer new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); string text Encoding.UTF8.GetString(buffer); Console.WriteLine(text); // 输出: Hello, Stream! }1.3 关键要点使用 using 语句确保流资源被正确释放调用Dispose()。缓冲区大小合理设置缓冲区如 4096 字节2. 委托 (Delegate) 与事件 (Event)委托是类型安全的函数指针事件是基于委托的发布-订阅模式实现是 .NET 事件驱动编程的基石。2.1 委托定义与使用委托是一种引用方法的类型声明定义了方法的签名。// 1. 声明委托类型 public delegate void ProcessDataDelegate(string data); // 2. 定义符合签名的方法 public void LogData(string data) Console.WriteLine($[LOG] {data}); public void SaveData(string data) File.WriteAllText(data.txt, data); // 3. 实例化委托并调用 ProcessDataDelegate processor LogData; processor SaveData; // 多播委托 processor(Sample Data); // 依次调用 LogData 和 SaveData2.2 事件封装后的委托事件是特殊的委托实例提供了更安全的封装通常遵循 .NET 事件模式sender, EventArgs。// 1. 定义事件参数类 public class FileProcessedEventArgs : EventArgs { public string FileName { get; set; } public long Size { get; set; } } // 2. 发布者类 public class FileProcessor { // 声明事件 public event EventHandlerFileProcessedEventArgs FileProcessed; public void ProcessFile(string path) { // ... 处理文件逻辑 // 触发事件 OnFileProcessed(new FileProcessedEventArgs { FileName path, Size new FileInfo(path).Length }); } protected virtual void OnFileProcessed(FileProcessedEventArgs e) { FileProcessed?.Invoke(this, e); // 线程安全的调用 } } // 3. 订阅者 public class Logger { public void Subscribe(FileProcessor processor) { processor.FileProcessed (sender, e) Console.WriteLine($文件 {e.FileName} 已处理大小: {e.Size} 字节); } }2.3 委托与事件的关系委托是类型事件是委托的实例。事件限制了外部访问外部类只能对事件进行 订阅和 -取消订阅操作不能直接赋值 () 或调用。标准模式使用 EventHandlerTEventArgs 委托类型和继承自 EventArgs 的参数类。3. 线程 (Threading).NET 提供了多种并发编程模型从原始线程到高级的 Task 并行库 (TPL)。3.1 Thread 基础Thread thread new Thread(() { Console.WriteLine($线程 {Thread.CurrentThread.ManagedThreadId} 正在运行); Thread.Sleep(1000); }); thread.Start(); thread.Join(); // 等待线程结束3.2 线程同步与线程安全当多个线程访问共享资源时需考虑同步。lock 语句最简单的互斥锁。。private readonly object _lockObj new object(); private int _counter 0; public void IncrementSafely() { lock (_lockObj) { _counter; } }5. 知识脉络与思维导图以下思维导图概括了本文的核心知识点与关联6. 总结与建议文件流优先使用异步 API (ReadAsync/WriteAsync) 和using语句关注性能与资源管理。委托与事件理解委托是基础掌握事件的标准模式这是实现松耦合、响应式系统的关键。线程在现代 .NET 开发中优先使用Task和async/await进行异步编程仅在需要显式控制线程时才使用Thread类。
C# 核心知识梳理:文件流、委托与事件、线程
发布时间:2026/7/6 3:43:37
摘要本文系统梳理了 C# 中三个关键且相互关联的高级主题文件流FileStream、委托与事件Delegate Event以及线程Threading。内容涵盖基本概念、核心用法、典型场景及三者之间的协同实践旨在帮助读者构建清晰的知识脉络。文末附有思维导图供快速回顾与索引。1. 文件流 (FileStream)文件流是 System.IO 命名空间下的核心类用于对文件进行字节级别的读写操作支持同步与异步模式。1.1 核心概念与类图FileStream继承自Stream抽象类是操作文件字节流的主要入口。相关关键类包括StreamReader/StreamWriter用于文本文件的便捷读写基于编码。BinaryReader/BinaryWriter用于二进制文件的读写。File与FileInfo提供静态和实例方法用于文件管理创建、删除、移动等。1.2 基本使用模式同步读写using (FileStream fs new FileStream(test.dat, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { // 写入字节 byte[] data Encoding.UTF8.GetBytes(Hello, Stream!); fs.Write(data, 0, data.Length); // 重置位置并读取 fs.Position 0; byte[] buffer new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); string text Encoding.UTF8.GetString(buffer); Console.WriteLine(text); // 输出: Hello, Stream! }1.3 关键要点使用 using 语句确保流资源被正确释放调用Dispose()。缓冲区大小合理设置缓冲区如 4096 字节2. 委托 (Delegate) 与事件 (Event)委托是类型安全的函数指针事件是基于委托的发布-订阅模式实现是 .NET 事件驱动编程的基石。2.1 委托定义与使用委托是一种引用方法的类型声明定义了方法的签名。// 1. 声明委托类型 public delegate void ProcessDataDelegate(string data); // 2. 定义符合签名的方法 public void LogData(string data) Console.WriteLine($[LOG] {data}); public void SaveData(string data) File.WriteAllText(data.txt, data); // 3. 实例化委托并调用 ProcessDataDelegate processor LogData; processor SaveData; // 多播委托 processor(Sample Data); // 依次调用 LogData 和 SaveData2.2 事件封装后的委托事件是特殊的委托实例提供了更安全的封装通常遵循 .NET 事件模式sender, EventArgs。// 1. 定义事件参数类 public class FileProcessedEventArgs : EventArgs { public string FileName { get; set; } public long Size { get; set; } } // 2. 发布者类 public class FileProcessor { // 声明事件 public event EventHandlerFileProcessedEventArgs FileProcessed; public void ProcessFile(string path) { // ... 处理文件逻辑 // 触发事件 OnFileProcessed(new FileProcessedEventArgs { FileName path, Size new FileInfo(path).Length }); } protected virtual void OnFileProcessed(FileProcessedEventArgs e) { FileProcessed?.Invoke(this, e); // 线程安全的调用 } } // 3. 订阅者 public class Logger { public void Subscribe(FileProcessor processor) { processor.FileProcessed (sender, e) Console.WriteLine($文件 {e.FileName} 已处理大小: {e.Size} 字节); } }2.3 委托与事件的关系委托是类型事件是委托的实例。事件限制了外部访问外部类只能对事件进行 订阅和 -取消订阅操作不能直接赋值 () 或调用。标准模式使用 EventHandlerTEventArgs 委托类型和继承自 EventArgs 的参数类。3. 线程 (Threading).NET 提供了多种并发编程模型从原始线程到高级的 Task 并行库 (TPL)。3.1 Thread 基础Thread thread new Thread(() { Console.WriteLine($线程 {Thread.CurrentThread.ManagedThreadId} 正在运行); Thread.Sleep(1000); }); thread.Start(); thread.Join(); // 等待线程结束3.2 线程同步与线程安全当多个线程访问共享资源时需考虑同步。lock 语句最简单的互斥锁。。private readonly object _lockObj new object(); private int _counter 0; public void IncrementSafely() { lock (_lockObj) { _counter; } }5. 知识脉络与思维导图以下思维导图概括了本文的核心知识点与关联6. 总结与建议文件流优先使用异步 API (ReadAsync/WriteAsync) 和using语句关注性能与资源管理。委托与事件理解委托是基础掌握事件的标准模式这是实现松耦合、响应式系统的关键。线程在现代 .NET 开发中优先使用Task和async/await进行异步编程仅在需要显式控制线程时才使用Thread类。