本文共 2323 字,大约阅读时间需要 7 分钟。
委托在C#中是一种引用传值机制,允许将一个方法作为参数传递给另一个方法,从而实现代码的复用。通过委托,可以避免重复编写相同功能的代码,提高开发效率。
委托的核心思想是将一个方法的引用作为参数传递给另一个方法。这样,调用方法的方法无需直接关心实现细节,只需调用委托即可。委托在C#中通过delegate
关键字声明,参数必须与被指向的方法签名一致。
使用StrToUpper
方法:
public static void StrToUpper(string[] name){ for (int i = 0; i < name.Length; i++) { name[i] = name[i].ToUpper(); }}
使用StrToLower
方法:
public static void StrToLower(string[] name){ for (int i = 0; i < name.Length; i++) { name[i] = name[i].ToLower(); }}
使用StrSYH
方法:
public static void StrSYH(string[] name){ for (int i = 0; i < name.Length; i++) { name[i] = "\"" + name[i] + "\""; }}
public delegate void DelStrTo(string[] name);
DelStrTo del = new DelStrTo(StrToUpper);del(names);
DelStrTo del = delegate (string[] names){ for (int i = 0; i < names.Length; i++) { names[i] = names[i].ToUpper(); }};del(names);
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/