委托+内置委托方法

千喜 千喜     2022-09-15     360

关键词:

委托概念:如果我们要把方法当做参数来传递的话,就要用到委托。简单来说委托是一个类型,这个类型可以赋值一个方法的引用。

 

声明委托:

在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字段和方法组成的,然后使用这个类实例化对象。在我们使用委托的时候,也需要经过这两个阶段,首先定义委托,告诉编译器我们这个委托可以指向哪些类型的方法,然后,创建该委托的实例。 定义委托的语法如下:

delegate void IntMethodInvoker(int x);

定义了一个委托叫做IntMethodInvoker,这个委托可以指向什么类型的方法呢? 这个方法要带有一个int类型的参数,并且方法的返回值是void的。 定义一个委托要定义方法的参数和返回值,使用关键字delegate定义。 定义委托的其他案例:

delegate double TwoLongOp(long first,long second);

delegate string GetAString();

 

使用委托:

private delegate string GetAString();

static void Main(){
    int x = 40;
    GetAString firstStringMethod = new GetAString(x.ToString);
//a指向了x中的tostring方法
把方法名给一个委托的构造方法

//相当于GetAString a = x.ToString;ToString与GetAString返回类型和参数都是一样的,这是把方法名直接赋值给委托的实例
    Console.WriteLine(firstStringMethod()); 
}

 

在这里我们首先使用GetAString委托声明了一个类型叫做fristStringMethod,接下来使用new 对它进行初始化,使它引用到x中的ToString方法上,这样firstStringMethod就相当于x.ToString,我们通过firstStringMethod()执行方法就相当于x.ToString() 通过委托示例调用方法有两种方式

fristStringMethod();

firstStringMethod.Invoke();

委托类型可以作为一个参数来使用:

 private delegate void PrintString();

        static void PrintStr( PrintString print )
        {
            print();
        }

static void Method1() {
   Console.WriteLine("method1");
}
static void Method2() {
   Console.WriteLine("method2");
}

 

PrintString method = Method1;
PrintStr(method);
method = Method2;
PrintStr(method);

 

实例

定义一个类MathsOperations里面有两个静态方法,使用委托调用该方法
class MathOperations{
    public static double MultiplyByTwo(double value){
        return value*2;
    }
    public static double Square(double value){
        return value*value;
    }
}
delegate double DoubleOp(double x);
static void Main(){
    DoubleOp[] operations={ MathOperations.MultiplyByTwo,MathOperations.Square };
    for(int i =0;i<operations.Length;i++){
        Console.WriteLine("Using operations "+i);
        ProcessAndDisplayNumber( operations[i],2.0 );
    }
}
static void ProcessAndDisplayNumber(DoubleOp action,double value){
    double res = action(value);
    Console.Writeline("Value :"+value+" Result:"+res);
}

 

 

Action委托和Func委托(内置委托类型):

除了我们自己定义的委托之外,系统还给我们提供过来一个内置的委托类型,Action和Func

Action委托引用了一个void返回类型的方法,T表示方法参数,先看Action委托有哪些

Action Action<in T>

Action<in T1,in T2>

Action<in T1,in T2 .... inT16>

//action可以后面通过泛型去指定action指向的方法的多个参数的类型 ,参数的类型跟action后面声明的委托类型是对应着的
    Action a = PrintString;//action是系统内置(预定义)的一个委托类型,它可以指向一个没有返回值,没有参数的方法
    Action<int> a = PrintInt;//定义了一个委托类型,这个类型可以指向一个没有返回值,有一个int参数的方法
    Action<string> a = PrintString;//定义了一个委托类型,这个类型可以指向一个没有返回值,有一个string参数的方法 在这里系统会自动寻找匹配的方法
    Action<int, int> a = PrintDoubleInt;//多个参数,指向两个int参数的无返回值的函数

 

 

Func引用了一个带有一个返回值的方法,它可以传递0或者多到16个参数类型,和一个返回类型

Func<out TResult>

Func<in T,out TResult>

Func<int T1,inT2,,,,,,in T16,out TResult>

Func<int> a = Test1;//func中的泛型类型指定的是 方法的返回值类型
Func<string, int> a = Test2;//func后面可以跟很多类型,最后一个类型是返回值类型前面的类型是参数类型,参数类型必须跟指向的方法的参数类型按照顺序对应
Func<int, int, int> a = Test3;//func后面必须指定一个返回值类型,参数类型可以有0-16个,先写参数类型,最后一个是返回值类型
            int res = a(1, 5);

 

委托和事件(代码片段)

一、委托1、什么是委托委托是面向对象的、类型安全的,是引用类型。使用delegate关键字进行定义。委托的本质就是一个类,继承自System.MulticastDelegate,里面内置了几个方法,可以在类的外面声明委托,也可以在类的内部声明委... 查看详情

深入浅出之委托(代码片段)

一、什么是委托     源码下载    1.委托是面向对象的、类型安全的,是引用类型。使用delegate关键字进行定义。委托的本质就是一个类,继承自System.MulticastDelegate,而它又派生自System.Delegate。里... 查看详情

c#内置委托

一、FuncFunc是一个.Net内置的委托。Func<Result>,Func<T1,Result>是一个.Net内置的泛型委托。Func<TResult>Func<T,TResult>Func<T1,T2,TResult>Func<T1,T2,T3,TResult>Func<T1,T2,T3,T4,TResult&g 查看详情

小5聊c#基础之内置和自定义委托的简单使用(代码片段)

...ff0c;从而能够对框架的设计和程序编码更加合理1、什么是委托这个在实际开发的时候,用到的概率也会很高什么是委托呢?简单的理解就是,委托是执行一个方法或者某个方法体,和前端js的call 查看详情

关于内置委托的用法(代码片段)

Action委托staticvoidMain(string[]args)#regionFunc<T,TResult>委托示例//需求:查找整型集合list中大于3的所有元素组成的新集合,并打印出集合元素List<int>list=newList<int>()1,2,3,4,5;//将匿名方法分配给Func<T,TResult>委托实例Func<... 查看详情

关于委托的理解

委托是一个类型 publicdelegatevoid声明的委托类型(typy参数); public声明的委托类型委托事件;//用声明的委托类型来创建一个委托事件 委托事件(参数);//执行这个委托事件 委托事件=其它方法;//给委托增加一个方法委托... 查看详情

委托事件

委托:就是一个方法的集合,一旦调用委托,就会依次执行集合里所有的方法。装入方法的签名必须和委托签名一致。申明委托的目的是为了包装N个相同签名的方法。委托的作用:作用一:1、可以帮助将方法作为参数使用。 ... 查看详情

c#委托(delegate)简介(代码片段)

转载于http://c.biancheng.net/view/2932.html文章目录C#命名方法委托C#多播委托匿名委托委托从字面上理解就是一种代理,类似于房屋中介,由租房人委托中介为其租赁房屋。在C#语言中,委托则委托某个方法来实现具体的功能。委托是... 查看详情

c#图解教程第十三章委托

委托什么是委托委托概述声明委托类型创建委托对象给委托赋值组合委托为委托添加方法从委托移除方法调用委托委托示例调用带返回值的委托调用带引用参数的委托匿名方法使用匿名方法匿名方法的语法Lambda表达式委托什么是... 查看详情

c#委托及各种写法

委托是嘛?委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法,即委... 查看详情

委托和事件

委托是一个类,它定义了方法的类型 委托的定义:publicdelegatevoidHello(); 方法中使用委托: publicvoidGreetHello(Hellohello){ hello(); //调用委托中的方法 }将方法绑定到委托上面 Hellohello; hello=方法1; 创建委托的时候,绑定一个方法 Hellohel... 查看详情

c#的委托事件总结

什么是委托?1.委托是C#中由用户自定义的一个类型。2.类表示的是数据和方法的集合,而委托实际上是一个能持有对某个或某些方法的引用的类。3.与其他的类不同,委托类能拥有一个签名,并且他只能持有与他的签名相匹配的... 查看详情

22什么事是委托委托回调实例方法和静态方法的区别以及委托链?委托是否可以有返回值?

 委托继承与System.Delegate类,是一种特殊的引用类型。委托的实质 实际上是一个指向方法的指针,该方法可以是静态方法。         查看详情

如何使用predicate以及如何自定定义predicate委托

微软公司提供只能返回bool值,接受一个参数的委托类型(Predicate)。//Predicate委托publicstaticclassPredicateDemo{//内置方法publicstaticvoidTestPredicate(){//泛型集合List<User>user=Five.GetList();//user.Find();//返回一个bool值//例1List< 查看详情

第十七章委托

目录:17.1初识委托17.2用委托回调静态方法17.3用委托回调实例方法17.4委托揭秘17.5用委托回调许多方法(委托链)17.6委托定义不要太多(泛型委托)17.7C#为委托提供的简化语法17.8委托和反射 Microsoft.NETFramework通过委托来提供... 查看详情

委托和事件

本文目录:委托   委托的简单使用   用委托实现插件式编程   多播委托   静态方法和实例方法对于委托的区别   泛型委托   Func和Action委托   委托的... 查看详情

未在委托上调用 CAAnimation 委托方法

】未在委托上调用CAAnimation委托方法【英文标题】:CAAnimationdelegatemethodsnotbeingcalledondelegate【发布时间】:2011-12-2620:17:55【问题描述】:委托是我的视图控制器。我正在通过以下方式设置委托:CABasicAnimationtheAnimation;theAnimation.deleg... 查看详情

c#中的委托是啥?事件是否一种委托?

委托委托类似于C/C++中的函数指针,它能够引用函数,但在C#中委托是一个对象,且是安全的。一个委托类型的变量可以引用一个或多个方法,这些方法由委托存放于一个调用列表中,当调用一个委托类型的变量即相当于依次调... 查看详情