SimpleLazy.cs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System;
  2. namespace GFGGame
  3. {
  4. // 替代 System.Lazy<T> 的简单实现
  5. // 替代 System.Lazy<T> 的简易实现
  6. public class SimpleLazy<T>
  7. {
  8. private readonly Func<T> _initializer;
  9. private T _value;
  10. private bool _isInitialized;
  11. private readonly object _lock = new object();
  12. public SimpleLazy(Func<T> initializer)
  13. {
  14. _initializer = initializer ?? throw new ArgumentNullException(nameof(initializer));
  15. }
  16. public T Value
  17. {
  18. get
  19. {
  20. if (!_isInitialized)
  21. {
  22. lock (_lock)
  23. {
  24. if (!_isInitialized)
  25. {
  26. _value = _initializer();
  27. _isInitialized = true;
  28. }
  29. }
  30. }
  31. return _value;
  32. }
  33. }
  34. public bool IsValueCreated => _isInitialized;
  35. }
  36. }