幽浮404

C#带有参数的事件订阅
首先定义一个传递参数的类,可以是EventArgs类的派生类(继承该类),也可以是string、int这种简单类,...
扫描右侧二维码阅读全文
16
2018/07

C#带有参数的事件订阅

首先定义一个传递参数的类,可以是EventArgs类的派生类(继承该类),也可以是string、int这种简单类,或者是其他自定义类型
这里定义一个CryEventArgs类传递参数

class CryEventArgs:EventArgs
{
    //存储一个字符串  
    public string CatName
    {
        get;
        set;
    }
}

接下来设计Cat类和Mouse类

class Cat
{
    string cName;
    public event mcEventHandler CatCryEvent;
    //定义带有参数的事件,此处CryEventArgs可以为其他简单类,如是,下面订阅的函数的签名需要相应地改变
    public event EventHandler<CryEventArgs> CatCryEvent1;
    public Cat(string name)
    {
        cName = name;
    }

    public void Cry()
    {
        Console.WriteLine(cName+"来了");
        Console.ReadLine();
        //用这个保存参数
        CryEventArgs e = new CryEventArgs();
        e.CatName = cName;
        //触发事件
        //CatCryEvent();
        CatCryEvent1(this, e);
    }
}

class Mouse
{
    public Mouse(Cat cat)
    {
        //订阅事件的两种形式
        //cat.CatCryEvent1 += Run;
        cat.CatCryEvent1 += new EventHandler<CryEventArgs>(Run);
    }

    private void Run(object sender,CryEventArgs e)
    {
        if(e.CatName=="Tom")
        {
            Console.WriteLine("别怕,是Tom这只傻猫");
            Console.ReadLine();
        }
        else
        {
            Console.WriteLine("快跑啊,是其他猫!");
            Console.ReadLine();
        }
    }
}

//主函数,模拟事件发生
public static void Main()
{
     Cat c1 = new Cat("Tom");
     Cat c2 = new Cat("Ben");
     //两只老鼠,分别见到两只猫
     Mouse m = new Mouse(c1);
     Mouse m2 = new Mouse(c2);
     c1.Cry();
     Console.WriteLine("//-----------------而另一边---------------------//");
     c2.Cry();
}

结果如下图
20170505154640495.png

转自loveyou388i的博客仅作为记录

Last modification:September 2nd, 2019 at 02:01 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment