企业微站系统,自己做网站新手入门,哪个网站做舞蹈培训推广效果好,亦庄网站建设价格一. 委托定义
1. 委托与多播委托
委托类型表示对具有特定参数列表和返回类型的方法的引用#xff0c;定义了委托实例可以调用的某类方法。 通过委托#xff0c;我们可以动态的通过委托变量来调用委托方法。一般用delegate来命名委托类型,但Action和Func也可以达到同样的效果…一. 委托定义
1. 委托与多播委托
委托类型表示对具有特定参数列表和返回类型的方法的引用定义了委托实例可以调用的某类方法。 通过委托我们可以动态的通过委托变量来调用委托方法。一般用delegate来命名委托类型,但Action和Func也可以达到同样的效果,而且不用声明委托。 委托实例则是指将方法赋值给委托变量的过程。 多播委托是指一个委托实例可以引用一组委托方法需要用或来添加委托方法也可以用-或-来减去右边的委托方法当然对单个委托方法使用-号等于将NULL赋值给委托变量。
2. 实例方法
当委托的对象为实例方法时不仅会保留对方法的引用也可以保留对方法实例的引用。
3. 泛型委托类型
委托类型也可以包含泛型委托参数。泛型是很重要的概念后面会专门再写一下 public delegate T GenericDelagete T (T arg);
4. Action
Action是系统内置类型预定义的一个委托类型, 没有返回值但是可以通过在Action后面声明泛型来指定方法的参数类型. Actionint, string c; Actionin T1,in T2 … ,in T16
public class Program{static int Square(int x){int r x * x;//定义Square方法求平方Console.WriteLine(r);return r;}static void Cube(int x){int r x * x * x;//定义Cube方法求立方Console.WriteLine(r);//return r;}static void Main(){Actionint Transformer new Actionint(Cube);Transformer(7);}}5. Func
Func 封装了一个不一定具有参数但却返回参数指定的类型值的方法。
class Program{static void Main(string[] args){Funcdouble, double, double Domulti calculate.multi;double result Domulti(13, 14);Console.WriteLine(相乘{0}, result);calculate c new calculate();Actiondouble, double DoSubstraction c.substraction;DoSubstraction(521, 1);}}class calculate{public static double multi(double x, double y){return x * y;}public void substraction(double x, double y){Console.WriteLine(相减:{0}, x - y);}}二. 例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 委托
{delegate int Transformer(int a);//定义一个int类型的委托类只能调用int类型的方法。public delegate T TranT(T arg);//定义一个泛型委托类型class Num //创建一个类定义一个Tranform方法可以遍历数组值,并将数组值赋给委托方法。{public static void Tranform(int[] values, Transformer d){for (int i 0; i values.Length; i){values[i] d(values[i]);//将数组的值赋给委托方法}}public int IP(int per){Console.WriteLine(per);return per;}public static void Tran1T(T[] values,TranT t){for (int i 0; i values.Length; i){values[i] t(values[i]);//将数组的值赋给委托方法}}}public class Program{static int Square(int x){int r x* x;//定义Square方法求平方Console.WriteLine(r);return r;}static int Cube(int x){ int r x* x *x;//定义Cube方法求立方Console.WriteLine(r);return r;}static void Main(){int b;int[] c {1,2,3 };Transformer e null;e Square;//加委托方付//Transformer e new Transformer(Square); //建立委托实例也可简写成Transformer e Squaree Cube;//e - Square;//减委托方法b e(3);//等同于b e.Invoke(3);Num.Tranform(c, Square);//调用Tranform其中可见可以直接引用Square方法foreach (int i in c){Console.WriteLine(${i});//用$可以不用占位符}Num n new Num(); //委托对象为实例化方法Transformer f n.IP; //建立委托实例f(3);Console.WriteLine(f.Target n); //实例方法返回Ture,静态方法返回值为NullNum.Tran1int(c, Square);//使用泛型类型的委托调用静态方法foreach (int i in c){Console.WriteLine(${i});//用$可以不用占位符}}}
}总结下过程:
定义一个委托创建需要委托调用的方法,该方法的参数需与委托相同实例化委托通过委托方法调用需要调用的方法.Num.Tranform(c, Square) 最近看到一个讲的特别好
C#中的委托和事件 - Part.1