初学C#,对委托的初认识
来源:互联网 发布:李喆工笔画网络班 编辑:程序博客网 时间:2024/05/22 03:10
之前一段时间处于备考阶段,现在有时间了,重学c#,当初学习了.net,发现是会傻傻的敲代码,不懂为什么这么用,现在重头开始看c#入门经典,看到委托这一块有点自己的理解吧,就来写博客了。
委托,这个词听起来很高大上,刚开始看到时候很懵,被这高大上的词吓到了,其实委托的机制非常简单,委托只是一种存储函数引用的类型,下面我们开始具体介绍。
委托的声明非常类似于函数,但没有函数体,有自己的关键字delegate,委托的声明指定了一个函数的返回类型和一个参数列表(可以有多个参数),定义后,就可以声明委托变量,把变量初始化为于委托相同的返回值且参数的一样的函数引用,之后就可以用委托变量进行调用这个函数了,和函数调用时一样的.
下面的示例使用委托进行访问两个函数中的一个。
代码如下:
class Program { delegate double ProcessDelegate(double param1, double param2);//ProcessDelegate这为委托名,要deledagte声明返回值double static double Multiply(double param1, double param2) { return param1 * param2; } static double Divide(double param1, double param2) { return param1 / param2; } static void Main(string[] args) { ProcessDelegate process;//声明委托变量 Console.WriteLine("Enter 2 numbers separated with a comma:"); string input = Console.ReadLine(); int commaPos = input.IndexOf(','); double param1 = Convert.ToDouble(input.Substring(0, commaPos)); double param2 = Convert.ToDouble(input.Substring(commaPos + 1, input.Length - commaPos - 1));//Substring(初始值的下标,长度); Console.WriteLine("Enter M to multiply or D to divide:"); input = Console.ReadLine(); if (input == "M") process = new ProcessDelegate(Multiply); else process = new ProcessDelegate(Divide); Console.WriteLine("Result: {0}", process(param1, param2)); Console.ReadKey();
现在你就可以copy代码在你的编译器进行运行了。
要把一个函数的引用赋值给委托变量,这个的使用略显古怪,不过还是很容易理解的,跟数组的初始化差不多,都需要new关键字创建一个新的委托,如process = new ProcessDelegate(Multiply);这里的参数只要函数名,不需要函数名+()。
实际上有非常简单的方法,只要将函数名赋值给委托变量就好,如process=Multiply,此时编译器会自动化一个委托,写成完整式。但代码是写给其他人看的,最好用完整的,这样别人一看就懂了,。
然后就可以直接调用函数了,如上面的赋值,就可以这样调用函数:process(double a,double b),这样就可以访问函数Multiple。
以前就是本人对委托的初认识,委托还有许多的用途,主要是在事件和事件处理中,在下将在接下来的学习中进行理解,然后再发表看法吧。
第一次写博客,没什么经验,大佬们可以私信指点,发表看法。
转载请注明出处
- 初学C#,对委托的初认识
- C语言初学--对变量的认识
- 对Spring MVC初学的认识
- 对Spring MVC初学的认识 编辑
- 初学C语言 C语言的认识
- 对C学习的认识
- 对C语言的认识
- 对C语言的认识
- 对C语言的认识
- 对C语言的认识
- 对c语的认识
- 关于委托的认识
- 对C#中委托的理解
- 对Objective-c委托的理解
- 对Objective-c委托的理解
- 对Objective-c委托的理解
- 对Objective-c委托的理解
- C++------对文件的操作(初学)
- SharedPreference的存值取值
- angular js 结算总价
- Guava之ArrayListMultimap
- 文件权限
- tensorflow-offline 离线安装
- 初学C#,对委托的初认识
- EL表达式&Ognl框架
- maven做ssm连接数据库的必备格式
- JS之数组
- hibernate与mybatis比较
- 使用ECharts构建饼状图的示例
- Java匿名类的初始化(没有构造器)
- angularjs双向数据绑定原理解析
- 12.20成都联考题解