zoukankan      html  css  js  c++  java
  • 备忘,Sl中委托使用两种方法

    这些日子使用委托的时候很不顺,于是认真的看了几篇文章,然后写了个小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~~知道的告知下,嘿嘿 谢谢~

  • 相关阅读:
    怪异恼人的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream问题的解决
    Spring3的quartz定时任务
    HTML模板
    SpringMVC 下载XLS文档的设置
    若想在当前路径下去运行非当前路径下的.class文件(即java可执行文件),该如何操作?
    霍金去世 享年76岁
    Github全面学习笔记
    Github上如何在Fork到的开源项目中提交Pull requests?
    Github中如何Fork开源项目?
    Java永久代去哪儿了
  • 原文地址:https://www.cnblogs.com/luxiaofeng54/p/1926833.html
Copyright © 2011-2022 走看看