fork download
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. public class Program
  5. {
  6. public static void Main()
  7. {
  8. var a = new A();
  9. a.Controls.Add(new B());
  10. a.Controls.Add(new C());
  11. a.Controls.Add(new D());
  12. a.DisplayMode = DisplayMode.Edit;
  13.  
  14. Console.WriteLine("After setting display mode:");
  15. foreach (var c in a.Controls)
  16. Console.WriteLine(c);
  17. }
  18. }
  19. public enum DisplayMode
  20. {
  21. View = 0,
  22. Edit = 1
  23. }
  24.  
  25. public interface IMode
  26. {
  27. DisplayMode DisplayMode { get; set; }
  28. }
  29.  
  30. public class A
  31. {
  32. private DisplayMode mDisplayMode;
  33. public A()
  34. {
  35. mDisplayMode = DisplayMode.View;
  36. Controls = new List<object>();
  37. }
  38. public DisplayMode DisplayMode
  39. {
  40. get
  41. {
  42. return mDisplayMode;
  43. }
  44. set
  45. {
  46. if (mDisplayMode != value)
  47. {
  48. mDisplayMode = value;
  49. foreach (var control in Controls)
  50. if (control is IMode)
  51. (control as IMode).DisplayMode = value;
  52. // the control ( b ).DisplayMode is not firing or executing the set
  53. // what i am missing here?
  54. }
  55. }
  56. }
  57. public List<object> Controls { get; set; }
  58. }
  59.  
  60. public class B : IMode
  61. {
  62. private DisplayMode mDisplayMode;
  63. public B()
  64. {
  65. X=0;
  66. mDisplayMode=DisplayMode.View;
  67. }
  68.  
  69. public int X { get ; set;}
  70.  
  71. public DisplayMode DisplayMode
  72. {
  73. get
  74. {
  75. return mDisplayMode;
  76. }
  77. set
  78. {
  79. if (mDisplayMode != value)
  80. {
  81. mDisplayMode = value;
  82. Console.WriteLine("Setting X = 10");
  83. X=10;
  84. }
  85. }
  86. }
  87.  
  88. public override string ToString()
  89. {
  90. return "Object B : X = " + X;
  91. }
  92. }
  93.  
  94. public class C {}
  95.  
  96. public class D {}
Success #stdin #stdout 0.03s 33904KB
stdin
Standard input is empty
stdout
Setting X = 10
After setting display mode:
Object B : X = 10
C
D