【发布时间】:2009-04-21 23:50:25
【问题描述】:
我需要帮助来尝试理解观察者模式和代表。我在另一个网站上找到了这段代码,我试图了解它实际上在做什么。谁能帮帮我。
当我执行代码时,我收到两条消息“服务器已启动并正在运行”和“服务器已关闭,我们正在处理它,它很快就会恢复”。我想我收到了两条消息,因为在 Main 中有一个 server.ServerStatus = true;和 server.ServerStatus = false。但是,如果我注释掉 server.ServerStatus = true;然后运行,我收到消息“服务器已启动并正在运行”,但我预计只会看到“服务器已关闭,我们正在处理它,它很快就会回来。”。有人可以解释吗? 苏珊
class Program
{
static void Main(string[] args)
{
Server server = new Server();
server.ServerStatusChanged += new EventHandler(ProcessServerStatus);
server.ServerStatus = true;
server.ServerStatus = false;
Console.Read();
}
public class Server
{
public event EventHandler ServerStatusChanged;
private bool _ServerStatus;
public bool ServerStatus
{
get { return this._ServerStatus; }
set {
if (this._ServerStatus == value) return; // Dont need to do anything;
if (this.ServerStatusChanged != null) // make sure the invocation list is not empty
ServerStatusChanged(value, new EventArgs()); // Firing Event
this._ServerStatus = value;
}
}
}
public static void ProcessServerStatus(object sender, EventArgs e)
{
bool status = (bool)sender;
if (status)
Console.WriteLine("Server is up and running");
else
Console.WriteLine("Server is down, We are working on it it will be back soon");
}
}
【问题讨论】:
-
这是标记为Java,但我认为代码实际上是C#。
-
确实,那些 get{} set{} :s 是 C# 的功能,而不是 Java。更改了标签。
标签: c# observer-pattern