请问各位高手:委托是不是只能通过类名调用,不能通过实例调用?
如果可以通过实例调用,那么下例中为什么不能:
using System;
using System.Collections.Generic;
using System.Text;
 
namespace eventexample
{
    class Usermintor
    {
        public delegate void DL(object sender, EventArgs e);
        public event DL DEvent;
 
        public void Run()
        {
            bool finished = false;
            do
            {
                if (Console.ReadLine() == "h")
                {
                    DEvent(this, new EventArgs()); 
                }
            }
            while (!finished);
        }
    }
 
    class Program
    {
        public Program(Usermintor m)
        {
            m.DEvent += new Usermintor.DL(this.ShowMessage);
        }
 
        public void ShowMessage(object sender,EventArgs e)
        {
            Console.WriteLine("Haha!!!");
        }
 
        static void Main(string[] args)
        {
            Usermintor us = new Usermintor();
            new Program(us);
            us.Run();
 
        }
    }
}
这里的m.dl不存在?
 

解决方案 »

  1.   

    是 作用域的问题,如下该后:using System; 
    using System.Collections.Generic; 
    using System.Text; namespace eventexample 

        //这2行移出来
        public delegate void DL(object sender, EventArgs e); 
        public event DL DEvent;     class Usermintor 
        {
            public void Run() 
            { 
                bool finished = false; 
                do 
                { 
                    if (Console.ReadLine() == "h") 
                    { 
                        DEvent(this, new EventArgs()); 
                    } 
                } 
                while (!finished); 
            } 
        }     class Program 
        { 
            public Program(Usermintor m) 
            { 
                m.DEvent += new Usermintor.DL(this.ShowMessage); 
            }         public void ShowMessage(object sender,EventArgs e) 
            { 
                Console.WriteLine("Haha!!!"); 
            }         static void Main(string[] args) 
            { 
                Usermintor us = new Usermintor(); 
                new Program(us); 
                us.Run();         } 
        } 
      

  2.   

    错了,不好意思
    仅: 
    public delegate void DL(object sender, EventArgs e); 
    这行出去就可以
    正确代码如下:using System; 
    using System.Collections.Generic; 
    using System.Text; namespace eventexample 
    {         
        //这1行移出来
        public delegate void DL(object sender, EventArgs e);
        class Usermintor 
        { 
             public event DL DEvent; 
            public void Run() 
            { 
                bool finished = false; 
                do 
                { 
                    if (Console.ReadLine() == "h") 
                    { 
                        DEvent(this, new EventArgs()); 
                    } 
                } 
                while (!finished); 
            } 
        }     class Program 
        { 
            public Program(Usermintor m) 
            { 
                m.DEvent += new Usermintor.DL(this.ShowMessage); 
            }         public void ShowMessage(object sender,EventArgs e) 
            { 
                Console.WriteLine("Haha!!!"); 
            }         static void Main(string[] args) 
            { 
                Usermintor us = new Usermintor(); 
                new Program(us); 
                us.Run();         } 
        } 
    }
      

  3.   

    楼上这位高手,那句代码移出来和不移出来有什么区别?不都是public类型嘛?不管放哪儿都一样吧!还有,我想你是误会我的意思了,我是说如果委托一定要放在一个类中,再在另一个类中调用该委托,是不是只能用类名,而不能用类的实例?