发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
时间越长越感觉自己学习的只是还是太少啊~,最近看了Head First这本书(好书啊有木有),这本书里面有个装饰者模式,用到了委托...突然想起来~以前一直用过,但是具体为什么用也没仔细想过,以前看了很多网上的学习资料说委托,MSDN上的专业资料可能写的很全但有的人会感觉太抽象。
所谓委托:delegate 是一种可用于封装命名或匿名方法的引用类型。委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。其实简单的说在我看来,委托现在给我带来的好处在运行期可以动态改变你要处理的东西,委托里面的参数其实传送的就是方法引用,把方法名当参数传,当然必须是保证返回值和方法签名是一样的~
下面是一部分简单的小例子,其实委托没我们想象的那么复杂
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DavidTest { public class Delegatebase { public delegate double CalculateMethod(double firstParam, double secondParam); /// <summary> /// Add Method /// </summary> /// <param name="first_param"></param> /// <param name="second_param"></param> /// <returns></returns> public static double Plus(double first_param, double second_param) { return first_param + second_param; } /// <summary> /// Minus Method /// </summary> /// <param name="first_param"></param> /// <param name="second_param"></param> /// <returns></returns> public static double Minus(double first_param, double second_param) { return first_param - second_param; } /// <summary> /// Mutiply Method /// </summary> /// <param name="first_param"></param> /// <param name="second_param"></param> /// <returns></returns> public static double Mutiply(double first_param, double second_param) { return first_param * second_param; } /// <summary> /// Divide Method /// </summary> /// <param name="first_param"></param> /// <param name="second_param"></param> /// <returns></returns> public static double Divide(double first_param, double second_param) { return second_param == 0 ? 0 : first_param / second_param; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DavidTest { class Program { static void Main(string[] args) { #region 委托测试 Delegatebase.CalculateMethod delegatePlus = new Delegatebase.CalculateMethod(Delegatebase.Plus); Delegatebase.CalculateMethod delegateMinus = new Delegatebase.CalculateMethod(Delegatebase.Minus); Delegatebase.CalculateMethod delegateMutiply = new Delegatebase.CalculateMethod(Delegatebase.Mutiply); Delegatebase.CalculateMethod delegateDivide = new Delegatebase.CalculateMethod(Delegatebase.Divide); Console.WriteLine("Plus Result: {0}", delegatePlus(1,2)); Console.WriteLine("Minus Result: {0}", delegateMinus(1, 2)); Console.WriteLine("Mutiply Result: {0}", delegateMutiply(1, 2)); Console.WriteLine("Divide Result: {0}", delegateDivide(1, 2)); #endregion Console.ReadLine(); } } }
简单吧~当然要用复杂的功能也有~有待进一步学习啊~
来自: 昵称10504424 > 《C#》
0条评论
发表
请遵守用户 评论公约
C#函数的参数传递方式1(值传递与地址传递)
C#计算矩阵的逆矩阵方法实例分析
C# 矩阵计算
} #endregion #region 操作符重载 + - * / == != public static Matrix operator +(Matrix a, Matrix b) { if (a.row != b.row || a.column != b.column) throw new Exception("矩阵维数不匹配。}...
委托、接口
委托、接口 委托:委托的声明非常类似于函数,但不带函数体,使用delegate关键字。接口不能包含实现其成员的任何代码,而只能定义成员本身,实现过程必须在实现接口的类中完成。所有接口成员必须在支...
C# 实现 复数 运算 类
public Complex(double real)public Complex(double real, double image)this.image = image;public static Complex operator +(Complex c1, Complex c2)return new Complex(c1.real + c2.real, c1.ima...
java 根据两个位置的经纬度,来计算两地的距离 经纬度处理
JAVA中控制double和float的精度
本篇介绍了在JAVA中如何对double或者float的浮点数进行精度计算,在JAVA中提供了多种参数来实现精度的不同控制方式。 http://stephen830.javaeye.com/blog/260776
Array.ConvertAll 方法
ConvertAll 方法。Array.public static int getInt(double d)return (int)d;static void Main(string[] args)double[] doArr = { 15.6, 17.8 };int[] inArr = Array.ConvertAll(doArr, new Converter&l...
V4.6方法的重载
V4.6方法的重载。namespace V4._方法的重载。//次定方法是否构成重载的有三个条件。static void WreteArea(int radius)WriteLine("您求圆的面积是:" + area);static void WreteArea(int widt...
微信扫码,在手机上查看选中内容