在C#中,延迟赋值(Lazy Initialization)通常意味着在对象首次被使用时才初始化其成员变量,而不是在对象创建时立即初始化。从C# 4.0开始,`System.Lazy
以下是一个C# 3.0中实现延迟赋值的示例,通过使用私有字段和公共属性来封装延迟逻辑:
using System;
public class MyClass
{
// 声明一个私有的、未初始化的字段
private int? _lazyValue;
// 公共属性用于访问_lazyValue,如果尚未初始化,则进行初始化
public int LazyValue
{
get
{
if (!_lazyValue.HasValue)
{
// 在这里执行初始化逻辑
_lazyValue = CalculateValue();
}
return _lazyValue.Value;
}
}
// 模拟一些计算或资源密集型操作
private int CalculateValue()
{
// 这里可以放置一些计算逻辑
Console.WriteLine("Calculating value...");
return DateTime.Now.Second; // 只是一个示例,返回当前秒数
}
// 构造函数
public MyClass()
{
// 在构造函数中不初始化_lazyValue
}
}
class Program
{
static void Main()
{
MyClass myObject = new MyClass();
// 第一次访问LazyValue时,将执行CalculateValue方法
Console.WriteLine("First access: " + myObject.LazyValue);
// 再次访问LazyValue时,不会再次执行CalculateValue方法,因为值已经被计算并存储
Console.WriteLine("Second access: " + myObject.LazyValue);
}
}
在这个示例中,`LazyValue` 属性在首次被访问时检查 `_lazyValue` 字段是否已被初始化(即是否有值)。如果没有,则调用 `CalculateValue` 方法来初始化 `_lazyValue`,并返回其值。之后,任何对 `LazyValue` 的访问都将直接返回已存储的值,而不会再次执行初始化逻辑。这种方法虽然不如C# 4.0及更高版本中 `Lazy