C#不同类间通过事件传递参数

5 篇文章 1 订阅

    C#中不同类之间传递参数的方法有许多,这里介绍其中一种方法,通过事件传递参数:

    定义两个类ClassA和ClassB,要通过事件将ClassA中成员class_A,传递到ClassB,同时ClassB中成员class_B能够传递给ClassA

代码如下:

一、从EventArgs基类中派生一个事件数据类:

 public class MyEventArgs:EventArgs
    {
        public string Value_E;
    }

二、定义两个类,名字为classA和ClassB:

ClassA

 public class ClassA
    {
       public ClassA(string i)
       {
           Value_A = i;
       }
       public string Value_A;

       //定义委托
       public delegate void  A_DelegateEventHander(object sender,MyEventArgs e);
       //定义委托事件
       public event A_DelegateEventHander A_Myevent;

       //触发事件
       public void NotifyTOB(string newStr)
       {
           MyEventArgs ee = new MyEventArgs();
           ee.Value_E = newStr;
           if (A_Myevent != null)
           {
               A_Myevent(this, ee);
           }

       }

         //事件处理函数
        public void change(object sender, MyEventArgs e)
       {
           this.Value_A = e.Value_E;
           Console.WriteLine("ClassA中变量Value_A已经改变为:{0}",this.Value_A);
       }
    }

ClassB

 class ClassB
    {
         public ClassB(string i)
       {
           Value_B = i;
       }
         public string Value_B;

        //定义委托
       public delegate void  B_DelegateEventHander(object sender,MyEventArgs e);
        //定义委托事件
       public event B_DelegateEventHander B_Myevent;

       //触发事件
       public void NotifyTOA(string newStr)
       {
          MyEventArgs ee = new MyEventArgs();
           ee.Value_E = newStr;
           if (B_Myevent != null)
           {
               B_Myevent(this, ee);
           }       
       }

        //事件处理函数
       public void change(object sender, MyEventArgs e)
       {
           this.Value_B = e.Value_E;
           Console.WriteLine("ClassB中变量Value_B已经改变为:{0}", this.Value_B);
       }
    }

三、在Main函数中代码:


    ClassA classA = new ClassA("我是A");
    ClassB classB = new ClassB("我是B");

    classA.A_Myevent +=new ClassA.A_DelegateEventHander(classB.change);
    classB.B_Myevent +=new ClassB.B_DelegateEventHander(classA.change);

    //不同类间成员变量的访问
    classA.NotifyTOB(classA.Value_A);
    classB.Value_B = "我是B"; //因为上一条语句已经改变了Value_B ,现在改回来以便观察下一条语句
    classB.NotifyTOA(classB.Value_B);

     //在一个类中随意修改另一个类的成员变量
     classA.NotifyTOB("我是改变的B");
     classB.NotifyTOA("我是改变的A");
    Console.ReadLine();

四、结果:

结果

    转载请注明作者和出处:http://blog.csdn.net/holamirai,未经允许请勿用于商业用途

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值