您的位置:首页 > 编程语言 > C#

c# 委托的应用

2012-09-13 21:27 218 查看
为什么用委托?

如有一个类库项目内有类叫Class1

方法M1,在M1内部中部调用方法Do,输出时间

外界使用Class1,会输出时间

当后台不希望调用Do方法时或想输出文件,-->修改源代码

不希望修改 ,

在声明前将变化的代码写成委托,不需要改源代码传方法进去

需要定义一个能存储方法的数据类型 委托

举例1

//委托

public delegate void Delegate();

public delegate void Delegate(string s1,int i1);

//使用委托

//2,通过该委托类型声明一个委托变量并赋值

No1Delegate weituo1=M1;

No2Delegate weituo2 = new No2Delegate(M2);

//相当于调用M1();

//3,使用委托

weituo1();

weituo2("hhh", 1);

//Console.WriteLine(age);

No2Delegate weituo3;

weituo3 = new No2Delegate(M2);

weituo3("11", 11);

Console.ReadKey();

}

static void M1()

{

Console.WriteLine("无参数和返回值");

}

static void M2(string s1, int i1)

{

Console.WriteLine(s1);

Console.WriteLine(i1);

//return 10;

}

举例2

//利用委托实现窗体间的文字传递

//需求:1,窗体1和2:textboox button

//2,点击窗体1的按钮将文字传到窗体2

//3,点击窗体2的按钮将文字传到窗体1并关闭2

//实现方法

//1,窗体1按钮事件

1)new 窗体2,参数是窗体1的text

2)给窗体2添加带参数的方法,: this()无参数构造函数

3)窗体2.show()

//2,实现窗体2上文字传递到窗体1

1)构造委托,单string参数

2)在窗体2声明委托

3)在窗体1创建改变文字的方法,并调用船体2的委托

4)当窗体2的按钮点下后,传递委托参数

//代码

//1,创建委托

public delegate void FormDelegate(string txt);

//2,Form1代码

private void button1_Click(object sender, EventArgs e)

{

//获取文字

string txt = textBox1.Text.Trim();

Form2 f2 = new Form2(txt);

f2.Forms = new delegates.FormDelegate(Change);

f2.Forms("1234");

f2.Show();

}

private void Change(string txt)

{

this.textBox1.Text = txt;

}

//3,Form2代码

public FormDelegate Forms;

public Form2(string txt)

: this()

{

this.textBox1.Text = txt;

}

private void button1_Click(object sender, EventArgs e)

{

string txt = this.textBox1.Text.Trim();

Forms(txt);

this.Close();

}

举例23

比较大小,字符串长度

//委托

public delegate int GetMaxDelegate(object a,object b);

//比较方法

class Max

{

public static object GetMax(object[] MyObj,GetMaxDelegate GetMax)

{

object maxVal=MyObj[0];

for (int i = 0; i < MyObj.Length; i++)

{

if (GetMax(MyObj[i],maxVal )> 0)

{

maxVal = MyObj[i];

}

}

return maxVal;

}

}

//比较

static void Main(string[] args)

{

object[] myObj = { 1, 23, 444, 0 };

object maxVal = Max.GetMax(myObj, GetMax);

Console.WriteLine(maxVal);

Console.ReadKey();

}

static int GetMax(object a,object b)

{

int n1 = (int)a;

int n2 = (int)b;

return n1 - n2;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: