C#でカスタムイベントを作成したのはこれが初めてではありません。この単純なケースではなぜ機能しないのか、頭がおかしくなります。
サブスクライバーを持つパブリッシャーがいます。私のメインプログラムでは、1つのパブリッシャーと2つのサブスクライバーをインスタンス化しました。addNewsが呼び出されると、サブスクライバーはイベントNewPublicationを受信する必要があります。
static void Main()
{
Publisher publisher = new Publisher();
Subscriber subscriber1 = new Subscriber("John");
Subscriber subscriber2 = new Subscriber("Jane");
publisher.AddNews("custom event NewPublication");
}
subscriber.csには次のものがあります。
public delegate void NewPublication(Publisher fromPublisher, String Message);
public class Publisher {
private List<String> newsList = new List<String>();
public event NewPublication newPublication;
public void AddNews(String news) {
newsList.Add(news);
if (newPublication != null)
{
newPublication(this, news);
}
}
}
サブスクライバーで私は持っています:
private String m_Name;
private event NewPublication newPublication;
public Subscriber(String name) {
m_Name = name;
newPublication += new NewPublication(subscriber_newPublication);
}
public void subscriber_newPublication(Publisher fromPublisher, String Message) {
MessageBox.Show(m_Name + " is notified for " + Message);
}
コンパイルされますが、実行時にイベントが発生することはありません。なぜだめですか?コードが発生するように修正するにはどうすればよいですか?
MSDNサンプルコードとの実際の違い:http: //msdn.microsoft.com/en-us/library/w369ty8x.aspx