0

こんにちは、比較すると疲れ果ててしまいました。ケースメソッドを切り替えます。私は以下の問題を読んだ:

最高のテーブル/列挙型メソッド呼び出しシステム

この使い方いいですね。Vivek の反応を見てください。

私の使用法は以下ですが、これはできません。


namespace DelegateKavrami
{
    class Program
    {
        static void Main(string[] args)
        {

            new MyTest().Run();
            Console.Read();
        }

    }


    public class MyTest
    {
        public void Run()
        {
            MyMessageProcessor myProcessor = new MyMessageProcessor();
            myProcessor.Register(0, Sms);
            myProcessor.Register(1, Mms);
            myProcessor.ProcessMessage(1, Message.Sms);

        }
        public void Sms(Message message)
        {
            Console.WriteLine("Sms olarak gönderilen mesaj");
        }
        void Mms(Message message)
        {
            Console.WriteLine("Mms olarak gönderilen mesaj:");
        }

    }

    public class MyMessageProcessor
    {
        public delegate void ProcessMessageDelegate(Message message);

        Dictionary methods;

        public void Register(int messageType,
                              ProcessMessageDelegate processMessage)
        {
            methods[messageType] = processMessage;
        }

        public void ProcessMessage(int messageType, Message message)
        {
            if (methods.ContainsKey(messageType))
            {
                methods[messageType](message);
            }
        }
    }

    public enum Message
    {
        Sms,Mms
    }

}

しかし、私の夢

myProcessor.ProcessMessage(1)

どうすればこれを使用できますか? 上記のコード実行後のエラー: オブジェクト参照がオブジェクトのインスタンスに設定されていません。ON メソッド [メッセージ タイプ] = processMessage;

4

2 に答える 2

1

あなたの辞書はインスタンス化されていません:

変更Dictionary methods;:

Dictionary methods = new Dictionary();

これはデバッグでも簡単に確認できます

于 2012-10-02T09:36:54.283 に答える