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,未经允许请勿用于商业用途