fork download
  1. using System;
  2.  
  3. public class Q : IDisposable
  4. {
  5. private string str;
  6. // также класс имеет объект типа sqlConnection(), чтобы был метод Dispose()
  7.  
  8. bool disposed = false;
  9.  
  10. public Q()
  11. {
  12. str = "Hello!";
  13. }
  14.  
  15. public string Str
  16. {
  17. set
  18. {
  19. str = value;
  20. }
  21. get
  22. {
  23. return str;
  24. }
  25. }
  26. public void Dispose()
  27. {
  28. Dispose(true);
  29. GC.SuppressFinalize(this);
  30. }
  31.  
  32. protected virtual void Dispose(bool disposing)
  33. {
  34. if (disposed)
  35. return;
  36.  
  37. if (disposing) {
  38. Console.WriteLine(" - disposing - ");
  39.  
  40. // здесь мы вызываем Dispose объекта класса sqlConnection()
  41.  
  42. str = null; // без этого мы два раза получим Hello!
  43. // нужно присваивать null? <= ВОПРОС
  44. }
  45. disposed = true;
  46. }
  47. }
  48.  
  49. public class Test
  50. {
  51. public static void Main()
  52. {
  53. Q q = new Q();
  54. string s = q.Str;
  55. Console.WriteLine("{0}", s);
  56. q.Dispose();
  57. string s1 = q.Str;
  58. Console.WriteLine("{0}", s1);
  59.  
  60. }
  61. }
Success #stdin #stdout 0.02s 33848KB
stdin
Standard input is empty
stdout
Hello!
 - disposing -