当前位置:编程学习 > C#/ASP.NET >>

精华帖讲的委托 有一些地方看不懂 请帮忙解释一下 10分送人了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 委托
{
    public class 场景
    {
        [STAThread]
        public static void Main(string[] args)
        {
            Console.WriteLine("场景开始了....");

            // 生成小王 

            小王 w = new 小王();

            // 生成小账 

            小张 z = new 小张();

            // 指定监视 

            z.PlayGame += new PlayGameHandler(w.扣钱);

            // 开始玩游戏 

            z.玩游戏();

            Console.WriteLine("场景结束...");

            Console.ReadLine();

        }

    }

    // 负责扣钱的人 

    public class 小王
    {

        public 小王()
        {

            Console.WriteLine("生成小王...");

        }

        public void 扣钱(object sender, EventArgs e)
        {

            Console.WriteLine("小王:好小子,上班时间胆敢玩游戏...");

            Console.WriteLine("小王:看看你小子有多少钱...");

            小张 f = (小张)sender;

            Console.WriteLine("小张的钱: " + f.钱.ToString());

            Console.WriteLine("开始扣钱......");

            System.Threading.Thread.Sleep(500);

            f.钱 = f.钱 - 500;

            Console.WriteLine("扣完了....现在小张还剩下:" + f.钱.ToString());

        }

    }

    // 如果玩游戏,则引发事件 

    public class 小张
    {

        // 先定义一个事件,这个事件表示“小张”在玩游戏。 

        public event PlayGameHandler PlayGame;

        // 保存小张钱的变量 

        private int m_Money;

        public 小张()
        {

            Console.WriteLine("生成小张....");

            m_Money = 1000; // 构造函数,初始化小张的钱。 

        }

        public int 钱 // 此属性可以操作小张的钱。 
        {

            get
            {

                return m_Money;

            }

            set
            {

                m_Money = value;

            }

        }

        public void 玩游戏()
        {

            Console.WriteLine("小张开始玩游戏了.....");

            Console.WriteLine("小张:CS好玩,哈哈哈! 我玩.....");

            System.Threading.Thread.Sleep(1000);

            System.EventArgs e = new EventArgs();

            OnPlayGame(e);

        }

        protected virtual void OnPlayGame(EventArgs e)
        {

            if (PlayGame != null)
            {

                PlayGame(this, e);

            }

        }

    }

    // 定义委托处理程序 

    public delegate void PlayGameHandler(object sender, System.EventArgs e); 

}
--------------------编程问答--------------------   z.PlayGame += new PlayGameHandler(w.扣钱);
这句
public event PlayGameHandler PlayGame;
这句
  System.EventArgs e = new EventArgs();

            OnPlayGame(e);


这个
   protected virtual void OnPlayGame(EventArgs e)
        {

            if (PlayGame != null)
            {

                PlayGame(this, e);

            }

        }

还有这个
public delegate void PlayGameHandler(object sender, System.EventArgs e); 
这里面的两个参数是干啥的 想知道 --------------------编程问答-------------------- C#教学第9讲事件
这是我的博客  自己去看吧  很详细的 9和10课中有
http://blog.csdn.net/chopper7278/archive/2008/11/03/3211834.aspx --------------------编程问答-------------------- 学习了~ --------------------编程问答--------------------
引用 1 楼 showshow99 的回复:
z.PlayGame += new PlayGameHandler(w.扣钱);
 这句
 public event PlayGameHandler PlayGame;
 这句
   System.EventArgs e = new EventArgs();

             OnPlayGame(e);


 这个
    protected virtual void OnPlayGame(EventArgs e)
         {

             if (PlayGame != null)
             {

                 PlayGame(this, e);

             }

         }

 还有这个
 public delegate void PlayGameHandler(object sender, System.EventArgs e);
 这里面的两个参数是干啥的 想知道

第一个参数表示一个object(任何对象),第二个是包含事件数据的类(好像是微软已经做好的东西吧),反正就是你的事件处理程序的签名,要和这个委托的签名一致。 --------------------编程问答-------------------- public delegate void PlayGameHandler(object sender, System.EventArgs e); 
这个是微软的一种事件处理程序风格,一般书上都建议用这种格式写
实际你写个无参数的时间处理也行
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,