备忘,Sl中委托使用两种方法

本文介绍了C#中委托多播的两种实现方法:一种是通过同一对象接收消息,另一种是使用静态事件定义进行接收。并通过示例代码展示了这两种方法的具体应用。

这些日子使用委托的时候很不顺,于是认真的看了几篇文章,然后写了个小demo,于是效果就出来了。

delegate可以多播,有两种方法实现

1、使用同一对象,接收消息

代码:

TestA 类中的委托

public class TestA
    {
        //定义委托 计算点到直线的距离
        public delegate void SendMessageAEventHandler(object sender, object obj);
        //定义事件
        public event SendMessageAEventHandler SendMessageEventA;

        public TestA() { 
            this.SendMessageEventA +=new SendMessageAEventHandler(TestA_SendMessageEventA);
        }

        void TestA_SendMessageEventA(object sender, object obj) {
            MessageBox.Show("A TestA  " + obj.ToString());
        }

        public void SendMessageATest(string msg) {

            SendMessageAEventHandler handle = SendMessageEventA;

            if (handle != null) {
                handle(this, msg);
            }
        }
    }

在MainPage中使用

 void MainPage_Loaded(Object sender, RoutedEventArgs e) {
             ta = new TestA();
            ta.SendMessageEventA +=new TestA.SendMessageAEventHandler(ta_SendMessageEventA);
        }
//接收
void ta_SendMessageEventA(object sender, object obj) {
            MessageBox.Show("A MainPageTestA  "+obj.ToString());
        }
//发送
 private void button2_Click(object sender, RoutedEventArgs e)
        {
            ta.SendMessageATest(this.textBox2.Text);
        }

在Test中接收

public Test(MainPage mainPage,TestA t) { 
           mainPage.SendMessageEvent +=new MainPage.SendMessageEventHandler(mainPage_SendMessageEvent);
           
            t.SendMessageEventA +=new TestA.SendMessageAEventHandler(ta_SendMessageEventA);
            TestB.SendMessageEventB+=new TestB.SendMessageBEventHandler(TestB_SendMessageEventB);
        }

void ta_SendMessageEventA(object sender, object obj) {
            MessageBox.Show("A TestA " + obj.ToString());
        }

结论表示,通过按钮事件发送一个消息,MainPage 和Test 中都可以接收

2、使用静态的事件定义接收

TestB中定义静态的委托事件

public class TestB
    {
         //定义委托 计算点到直线的距离
        public  delegate void SendMessageBEventHandler(object sender, object obj);
        //定义事件
        public static event SendMessageBEventHandler SendMessageEventB;

        public static void SendMessageBTest(string msg) {

            SendMessageBEventHandler handle = SendMessageEventB;

            if (handle != null) {
                handle("Obj", msg);
            }
        }
    }

MainPage中使用

 void MainPage_Loaded(Object sender, RoutedEventArgs e) {
            TestB.SendMessageEventB+=new TestB.SendMessageBEventHandler(TestB_SendMessageEventB);           
        }
//MainPage中接收
 void TestB_SendMessageEventB(object sender, object obj) {
            MessageBox.Show("B MainPageTestB  " + obj.ToString());
        }
//发送
private void button3_Click(object sender, RoutedEventArgs e)
        {
            TestB.SendMessageBTest(this.textBox3.Text);
        }

Test中接收

public Test(MainPage mainPage,TestA t) { 
            TestB.SendMessageEventB+=new TestB.SendMessageBEventHandler(TestB_SendMessageEventB);
        }

 void TestB_SendMessageEventB(object sender, object obj) {
            MessageBox.Show("B TestB " + obj.ToString());
        }

实验表示,使用静态的委托也能接收到多播消息

额,不懂如何上传源码Demo~~知道的告知下,嘿嘿 谢谢~

转载于:https://www.cnblogs.com/luxiaofeng54/archive/2011/01/05/1926833.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值