























先看代码:
仅仅根据自己学习的情况做记录!!!//先定义三个返回值相同,方法参数相同的三个方法
public int JiaFa(int x,int y){ return x+y; } public int JianFa(int x,int y){ return x-y; } public int YunSuan(int x,int y){ return x*x+y*x; } //定义代理类 代理类针对返回值为int 参数为(int x,int y)的同类方法 public delegate int JiSuan(int x,int y); JiSuan jiSuan1= new JiSuan(JiaFa); JiSuan jiSuan2 = new JiSuan(JianFa); JiSuan jiSuan3 = new JiSuan(YunSuan);
再看定义:
代理是一种引用类型的变量,用于存放某个方法的引用地址
分析:
第一代理是变量
第二存放地址 就是指针
从以上代码中 jiSuan1,jiSuan2,jiSuan3是变量,就是所谓的代理
因此倒推
JiSuan jiSuan1= new JiSuan(JiaFa);
jiSuan1是代理,是地址,是变量
Jisuan是一种类,就是代理类
从代理类的定义格式来看:
public delegate int JiSuan(int x,int y);
--------------------------------------
代理 -- 类
delegate JiSuan
而且用输出和输入的形式对这代理类进行了规定
这个代理类指向的方法具有 输出为int 输入为满足int x,int y参数的形式总结:
代理的用法:
先用delegate关键字 声明一个 代理类 这个代理类的形式和代理指向的方法具有同样的特点
用代理类调用带参构造,产生一个对象,这个参数就是指向或者说是调用的具体的方法。
千万注释:代理就是个变量,准确说是个指针;它是代理类产生的对象;这个代理类声明的时候以 输入类型 代理类名(参数列表)的形式进行声明
也就是代理 代理关键字 输入类型 代理类名(参数列表)的形式进行声明
delegate int Calcu (int x,int y);

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestConsoleFramwork { internal class Program { //一、创建委托类 public delegate int CalHandler(int x, int y); //二、创建具体的委托方法 static int Jia(int x,int y) { return x + y; } static int Jian(int x, int y) { return x - y; } static void Main(string[] args) { //三、在方法内生成为方法的委托对象 CalHandler JiaHandler = new CalHandler(Jia); CalHandler JianHandler = new CalHandler(Jian); //四、使用委托对象.Invoke方法执行具体的方法 int a=JiaHandler.Invoke(3,4); int b=JianHandler.Invoke(5,6); Console.WriteLine(a); Console.WriteLine(b); //五、也可以使用,两种效果一样 int c = JiaHandler(3,4); int d=JianHandler.Invoke(5,6); Console.WriteLine(c); Console.WriteLine(d); Console.Read(); } } }
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。