在C#中,弱引用是一种特殊的引用类型,它允许对象在满足垃圾收集器(GC)的回收条件时被自动回收,即使存在弱引用指向该对象。弱引用通过System.WeakReference
类实现。此外,System.Runtime.CompilerServices.ConditionalWeakTable<TKey, TValue>
是一个特殊的数据结构,它使用弱引用存储键值对,使得当键对象不再强引用时,对应的键值对也能被垃圾收集器自动清理。接下来,我们将通过详细的代码示例和注释,深入探讨这两种弱引用的实现及其应用场景。
1. WeakReference:基础弱引用
Csharp
1using System;
2
3public class WeakReferenceExample
4{
5 public static void Main()
6 {
7 // 创建一个强引用对象
8 var strongRefObject = new MyClass("Strong reference");
9
10 // 创建一个弱引用对象,指向强引用对象
11 WeakReference weakRef = new WeakReference(strongRefObject);
12
13 // 输出强引用对象的值
14 Console.WriteLine($"Strong reference value: {strongRefObject.Value}");
15
16 // 清除强引用
17 strongRefOb