C#委托。
时间:2019-03-20
本文章向大家介绍C#委托。,主要包括C#委托。使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
什么是委托。
委托是一种数据类型。
委托的作用。
把变化的东西封装起来。
委托是引用变量,声明后不赋值为null 所以使用前校验非空。
class Program { static void Main(string[] args) { //2、使用委托。 // 先new一个委托类型的对象,并传递方法进去。即md委托保存了M1方法。 MyDelegate md = new MyDelegate(M1); //调用md委托就是调用M1方法 md(); } static void M1() { Console.WriteLine("一个没有参数没有返回值的方法"); } } //1、定义委托类型 //定义一个委托类型,用来保存无参数,无返回值的方法。 public delegate void MyDelegate();
目前来看,委托没啥毛用,直接调用M1不就得了?
下面程序的作用是,传入一个字符串,把每个人名都加上*
class Program { static void Main(string[] args) { string[] name = new string[] { "Sam", "Jill", "Penny" }; MyClass mc = new MyClass(); mc.Change(name); for (int i = 0; i < name.Length; i++) { Console.WriteLine(name[i]); } } } public class MyClass { public void Change(string[] str) { for (int i = 0; i < str.Length; i++) { str[i] = "*" + str[i] + "*"; } } }
但是现在需求变了,把每个人名都换成大写。 就需要改变代码。
而代码部分,只有str[i] = "*" + str[i] + "*"; 是变化的。
就可以把这段代码封装起来。
class Program { static void Main(string[] args) { string[] name = new string[] { "Sam", "Jill", "Penny" }; MyClass mc = new MyClass(); mc.Change(name,ChangeValue); for (int i = 0; i < name.Length; i++) { Console.WriteLine(name[i]); } } static string ChangeValue(string str) { return str.ToUpper(); } } public class MyClass { public void Change(string[] str,ChangeDelegate ChangeValue) { for (int i = 0; i < str.Length; i++) { str[i] = ChangeValue(str[i]); } } } public delegate string ChangeDelegate(string str);
- 如何给已经有数据的DataTable动态增加一列并赋值
- Gitlab上采用rpm方式快速安装的操作记录
- WCF与IIS集成Windows身份验证的矛盾
- openstack中彻底删除计算节点的操作记录
- 验证码无刷新更换
- 从MapX到MapXtreme2004[12]-SearchNearest!
- Sublime Text的安装与配置
- 复制到浮动层,强调显示某个(多个)区域
- Jquery实现的一种常用高亮效果
- MaCfee导致Asp.net/Jmail无法发送邮件的解决办法
- 水晶报表文本在web中无法两端对齐
- jenkins配置记录(2)--代码发布流程
- 未来大数据有哪些大趋势,第一个趋势是什么?
- Java8新特性
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ubuntu中修改grub的启动时间生成
- linux7下虚拟主机的三种实现方式
- 详解CentOS7下PostgreSQL 11的安装和配置教程
- CentOS下安装Memcached和PHP Memcached扩展
- Mac中文件权限查看和设置详解
- linux下open-vswitch安装卸载操作
- CentOS7安装GUI界面及远程连接的实现
- Centos7.4环境安装lamp-php7.0教程
- iOS摄像头推流(2)
- ubuntu 16.04LTS 开机启动自动更换壁纸的实现方法
- linux中Centos7的LVM磁盘扩容问题
- 如何禁止网站内容被搜索引擎收录的几种方法讲解
- Apache由http自动跳转到https的多种方法
- CentOS服务器中安装FFmpeg的完整步骤
- linux中Centos7增加swap分区详解