Просьба, мне нужно знать, чего я не вижу, или что я делаю неправильно со следующим кодом?Почему свойство класса, реализующего интерфейс, не работает?
public class Program
{
public static void Main()
{
var a = new A();
a.Controls.Add(new B());
a.Controls.Add(new C());
a.Controls.Add(new D());
a.DisplayMode = DisplayMode.Edit;
}
}
public enum DisplayMode
{
View = 0,
Edit = 1
}
public interface IMode
{
DisplayMode DisplayMode { get; set; }
}
public class A
{
private DisplayMode mDisplayMode;
public A()
{
mDisplayMode = DisplayMode.View;
Controls = new List<object>();
}
public DisplayMode DisplayMode
{
get
{
return mDisplayMode;
}
set
{
if (mDisplayMode != value)
{
mDisplayMode = value;
foreach (var control in Controls)
if (control is IMode)
(control as IMode).DisplayMode = value;
// the control (b).DisplayMode is not firing or executing the set
// what i am missing here?
}
}
}
public List<object> Controls { get; set; }
}
public class B : IMode
{
private DisplayMode mDisplayMode;
public B()
{
X=0;
mDisplayMode=DisplayMode.View;
}
public int X { get ; set;}
public DisplayMode DisplayMode
{
get
{
return mDisplayMode;
}
set
{
if (mDisplayMode != value)
{
mDisplayMode = value;
// some code should be executed;
X=10;
}
}
}
}
public class C {}
public class D {}
после того, как я называю a.DisplayMode=DisplayMode.Edit
я ожидал, что все элементы управления (B) будет исполнять набор DisplayMode, но после выполнения кода, его не стрелять по всем
, что я имею в виду под значением сеттер DisplayMode не выполняется, потому что если тогда, то значение X должно стать 10
Вы уверены, что у вас есть экземпляр 'B' в коллекции управления? – xxbbcc
как вы не получили исключение NullReferenceException с этим кодом? вы не инициализируете Controls.Also DisplayMode - это перечисление и никогда не может быть нулевым. –
Измените свое объявление Controls на 'public List Элементы управления {get; задавать; } ' –
Rahul