Это похоже на шаблон Observer. Вы можете передать SubClass, который наследуется от RailwayUser
экземпляра объекта в RailwaySignal
class
Ваш RailwayUser
класс должен создать public abstract void Notice(Colour state)
метод.
public abstract class RailwayUser
{
private string className;
public RailwayUser()
{
Type type = this.GetType();
className = type.Name;
}
public void PrintClassName()
{
Console.WriteLine(className);
}
public abstract void Notice(Colour state);
}
Driver
класс может наследовать RailwayUser
класс, затем переопределить Метод уведомления.
public class Driver : RailwayUser
{
public override void Notice(Colour state)
{
Console.WriteLine($"Driver see the {state.ToString()}");
}
}
Есть
List<RailwayUser> _watches
содержит наблюдаемый объект
- использовать
SubScript(RailwayUser user)
пользователя подписки на _watches
List.
- RailwayUser
Notify()
, чтобы вызвать все ваши наблюдаемые метод уведомления.
выглядит так.
public class RailwaySignal
{
private List<RailwayUser> _watches;
public Colour Stata { get; set; }
public RailwaySignal()
{
_watches = new List<RailwayUser>();
}
public void SubScript(RailwayUser user)
{
_watches.Add(user);
}
public void Notify()
{
foreach (RailwayUser u in _watches)
{
u.PrintClassName();
u.Notice(Stata);
}
}
}
образец: https://dotnetfiddle.net/GcdGMy
Вы также можете использовать event
, чтобы передать метод в RailwaySignal
, а затем вызвать Notify
метод.
public enum Colour
{
Green,
Red,
Disable
}
public abstract class RailwayUser
{
private string className;
public RailwayUser()
{
Type type = this.GetType();
className = type.Name;
}
public void PrintClassName()
{
Console.WriteLine(className);
}
public abstract void Notice(Colour state);
}
public class Driver : RailwayUser
{
public override void Notice(Colour state)
{
Console.WriteLine("Driver see the "+ state.ToString());
}
}
public class Controller : RailwayUser
{
public override void Notice(Colour state)
{
Console.WriteLine("Controller see the " + state.ToString());
}
}
public class RailwaySignal
{
public delegate void NoticeEvent(Colour state);
public event NoticeEvent Notifys;
public Colour Stata { get; set; }
public void Notify()
{
if (Notifys != null)
{
Notifys(Stata);
}
}
}
используйте вот так.
RailwaySignal railway = new RailwaySignal() { Stata = Colour.Green};
railway.Notifys += new Driver().Notice;
railway.Notifys += new Controller().Notice;
railway.Notify();
образец: https://dotnetfiddle.net/GcdGMy