博客
关于我
CSharp中委托(一)委托、匿名函数、lambda表达式、多播委托、窗体传值、泛型委托
阅读量:368 次
发布时间:2019-03-05

本文共 2323 字,大约阅读时间需要 7 分钟。

委托在C#中是一种引用传值机制,允许将一个方法作为参数传递给另一个方法,从而实现代码的复用。通过委托,可以避免重复编写相同功能的代码,提高开发效率。

一、委托的基本概念

委托的核心思想是将一个方法的引用作为参数传递给另一个方法。这样,调用方法的方法无需直接关心实现细节,只需调用委托即可。委托在C#中通过delegate关键字声明,参数必须与被指向的方法签名一致。

二、实现三个需求的方法

1. 将字符串数组中的每个元素转换为大写

使用StrToUpper方法:

public static void StrToUpper(string[] name){    for (int i = 0; i < name.Length; i++)    {        name[i] = name[i].ToUpper();    }}

2. 将字符串数组中的每个元素转换为小写

使用StrToLower方法:

public static void StrToLower(string[] name){    for (int i = 0; i < name.Length; i++)    {        name[i] = name[i].ToLower();    }}

3. 将字符串数组中的每个元素两边加上双引号

使用StrSYH方法:

public static void StrSYH(string[] name){    for (int i = 0; i < name.Length; i++)    {        name[i] = "\"" + name[i] + "\"";    }}

三、使用委托实现三个需求

1. 声明委托类型

public delegate void DelStrTo(string[] name);

2. 创建委托对象并赋值方法

DelStrTo del = new DelStrTo(StrToUpper);del(names);

3. 使用匿名函数实现委托

DelStrTo del = delegate (string[] names){    for (int i = 0; i < names.Length; i++)    {        names[i] = names[i].ToUpper();    }};del(names);

4. 使用lambda表达式实现委托

DelStrTo del = (string[] names) =>{    for (int i = 0; i < names.Length; i++)    {        names[i] = names[i].ToUpper();    }};del(names);

四、多播委托

委托可以指向多个方法,通过加法和移除方法实现多播:

DelTest del = T1;del += T2;del += T3;del -= T3;del -= T1;del();

五、窗体传值示例

通过委托实现跨窗体数据传递:

public delegate void DelShowMsg(string str);public partial class Form1 : Form{    public Form1()    {        InitializeComponent();    }    private void btnfm1_Click(object sender, EventArgs e)    {        Form2 fm = new Form2(ShowMsg);        fm.Show();    }    public void ShowMsg(string str)    {        label1.Text = str;    }}public partial class Form2 : Form{    public DelShowMsg _del;    public Form2(DelShowMsg del)    {        this._del = del;        InitializeComponent();    }    private void btnfm2_Click(object sender, EventArgs e)    {        _del(textBox1.Text);    }}

六、泛型委托

泛型委托允许任意类型的比较:

public delegate int DelCompare
(T t1, T t2);public static T GetMax
(T[] nums, DelCompare
del){ T max = nums[0]; for (int i = 0; i < nums.Length; i++) { if (del(max, nums[i]) < 0) { max = nums[i]; } } return max;}public static int Compare1(int n1, int n2){ return n1 - n2;}

七、总结

委托是一种强大的工具,能够有效减少代码重复,提高代码的可维护性和复用性。在实际开发中,选择合适的委托方式可以提升效率,实现代码的灵活性。

转载地址:http://pnuwz.baihongyu.com/

你可能感兴趣的文章
力扣239. 滑动窗口最大值
查看>>
史上最全Vue的组件传值
查看>>
CSS position属性static/relative/absolute/fixed/sticky用法总结
查看>>
6.14编一个程序,将两个字符串s1和s2比较,不要用strcmp函数。
查看>>
如何解决vscode检测到#include错误,请更新includePath。
查看>>
1007 Maximum Subsequence Sum (25分) Python解法
查看>>
Java纯文本文件显示工具制作
查看>>
Unity2D Fixed Joint 2D详解
查看>>
Unity Shader之路(五)创建第一个顶点/片元着色器?
查看>>
L3-008 喊山 (30分) C++ BFS题解
查看>>
Web框架——Flask系列之Flask-SQLAlchemy数据库的基本操作(九)
查看>>
六、Numpy的使用(详解)
查看>>
三、案例:留言板 & url.parse()
查看>>
Python中的filter()函数!!!1
查看>>
(新手小白必学!)用Python设计和实现聪明的尼姆游戏(人机对战)!!!!
查看>>
LeetCode:283. 移动零!!!1
查看>>
Python实验26:计算文件MD5值
查看>>
端口探测
查看>>
LeetCode:28. 实现 strStr()——————简单
查看>>
java 中 private default protected public 范围
查看>>