BaseProperty.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Runtime.CompilerServices;
  4. using System.Text;
  5. using Veldrid.Common.Tools;
  6. namespace Veldrid.Common.Plot
  7. {
  8. public abstract class BaseProperty:IDisposable
  9. {
  10. private bool disposedValue;
  11. public event EventHandler<String> PropertyChanged;
  12. protected void Set<T>(ref T field, T value, [CallerMemberName] String propertyName = "")
  13. {
  14. if(typeof(T).IsValueType && field.ToString()!=value.ToString())
  15. {
  16. field = value;
  17. OnPropertyChanged(this, propertyName);
  18. }
  19. else if (!Object.Equals(field, value))
  20. {
  21. field = value;
  22. OnPropertyChanged(this, propertyName);
  23. }
  24. }
  25. protected void OnPropertyChanged(object sender, string name) => PropertyChanged?.Invoke(sender, name);
  26. protected virtual void Dispose(bool disposing)
  27. {
  28. if (!disposedValue)
  29. {
  30. if (disposing)
  31. {
  32. this.ClearEventHandle();
  33. // TODO: 释放托管状态(托管对象)
  34. }
  35. // TODO: 释放未托管的资源(未托管的对象)并重写终结器
  36. // TODO: 将大型字段设置为 null
  37. disposedValue = true;
  38. }
  39. }
  40. // // TODO: 仅当“Dispose(bool disposing)”拥有用于释放未托管资源的代码时才替代终结器
  41. // ~BaseProperty()
  42. // {
  43. // // 不要更改此代码。请将清理代码放入“Dispose(bool disposing)”方法中
  44. // Dispose(disposing: false);
  45. // }
  46. public void Dispose()
  47. {
  48. // 不要更改此代码。请将清理代码放入“Dispose(bool disposing)”方法中
  49. Dispose(disposing: true);
  50. GC.SuppressFinalize(this);
  51. }
  52. }
  53. }