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;
}
如有一个类库项目内有类叫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;
}
相关文章推荐
- 【2016-11-7】【坚持学习】【Day22】【C# 委托的应用】
- C# 委托应用总结
- 关于C#/.NET中委托和事件的机制和应用的故事(转)
- C# 泛型委托应用
- 关于C#/.NET中委托和事件的机制和应用的故事(转)
- C# 委托与事件简单应用
- C# 委托与事件简单应用
- C#学习笔记(8)——委托应用(显示,写入时间)
- .NET委托(在多线程编程中的应用):一个C#睡前故事
- .NET委托(在多线程编程中的应用):一个C#睡前故事
- C# 委托应用总结
- C#委托的一些应用,个人肤浅的一些操作
- C# 中的委托和事件 分类: .NET 接口+泛型+委托+继承 2011-08-30 10:09 20人阅读 评论(0) 收藏 举报 引言 委托 和 事件在 .Net Framework中的应用非
- C# 委托应用总结
- 详细教程C#中的委托和事件应用 一
- C# 委托应用总结
- C# 委托在线程与UI界面之间的应用
- C#中委托的匿名方法,及其在协变与逆变中的应用
- 详细教程C#中的委托和事件应用(二)
- 对c#委托及事件委托的理解_c#应用