从今天开始写关于C#的系列文章,本篇文章主要讲解C#中的委托使用。
委托其实就是一种数据类型,和int,string是一样的概念。
如果要把一个字符串赋值给一个变量,用string声明一个变量即可。如果要把一个方法赋值给一个变量,那么用什么关键字呢?当然就是用委托了,所以用委托声明的变量就可以接受一个方法了,之后那个变量就可以像方法一样执行。
下面开始详细介绍:
先看一段代码:
static void Main(string[] args) { int i; //可以接受一个整数的变量 string str; //可以接受一个字符串的变量 }
在Main方法内声明了2个变量:i和str。大家都很熟悉的代码,变量i表明它可以接受一个整数,变量str表明它可以接受一个字符串。
那么如果我想声明一个变量既可以接受整数又可以接受字符串,那该用什么数据类型来声明这样的变量呢?
答案很简单:用class。
public class MyClass { public int i { get; set; } //接受整数 public string str { get; set; } //接受字符串 }
那么我们就创建了一种数据类型:MyClass,用它声明的变量可以同时接受一个整数和一个字符串。
如下:
static void Main(string[] args) { MyClass obj = new MyClass(); obj.i =1; obj.str ="我是字符串"; }
现在问题来了:我想要一种数据类型可以声明一个变量用于接受一个方法。
既然这种数据类型要接受一个方法,那我们先看看方法长什么样:
public string Method(int m,int n) { return ""; }
上面的Method方法最主要的特点就是这个方法的输入参数数据类型与输出的数据类型。
通常我们会调用各种方法,调用方法前我们会确定方法的输入参数的数据类型和方法输出的数据类型,至于方法的主体我们通常不关心,方法的主体由方法编程人员去完成即可。
所以我们编写一个方法,调用一个方法前都要明确的方法的输入输出数据类型。
对于上面Method方法的输入数据类型为2个整数,输出的是一个字符串。
现在我们要声明一个变量来接受这个方法,那么这个变量的数据类型也应该要明确输入,输出的数据类型。那么我们应该定义符合那个方法输入与输出一致的数据类型。
public class Test { //这种数据类型可以接受一个方法 public delegate string MethodDelegate(int i1,int i2); }
好了,我已经声明了和上面Method方法一样的输入与输出类型的一个数据类型了:MethodDelegate。
那么我们就可以用这个数据类型来接受Mehtod方法了,完整代码如下:
class Program { //这种数据类型可以接受一个方法 public delegate string MethodDelegate(int i1, int i2); /// <summary> /// 我们可以用MethodDelegate声明一个变量来接受方法了 /// </summary> public void Test() { MethodDelegate IamMethod = Method; //把下面那个Method方法赋值给变量了。 var result=IamMethod(1, 2); //然后把这个变量当作方法一样执行即可。 } public string Method(int m, int n) { return ""; } }
在上面第4行:我们用delegate关键字声明了一种数据类型:这种数据类型和我们想要接受什么样方法的输入输出类型保持一致就可以了。
那么上面的MethodDelegate就可以接受带2个int类型的输入参数并且返回类型是string的任何方法了。
现在我们发现委托和int,string是一样的概念,只不过,int用来接受整数,string用来接受字符串,delegate用来声明一种数据类型接受方法。
主要内容:声明委托,实例化委托,多播委托(合并委托)C# 中的委托(Delegate)类似于 C 或 C++ 中的函数指针,是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。委托特别适用于实现事件和回调方法,所有的委托都派生自 System.Delegate 类。在实例化委托时,可以将委托的实例与具有相同返回值类型的方法相关联,这样就可以通过委托来调用方法。另外,使用委托还可以将方法作为参数传递给其他方法, 委托具有以下特点: 委托类似
C# 中的委托类似于 C 或 C++ 中指向函数的指针。委托表示引用某个方法的引用类型变量,运行时可以更改引用对象。 特别地,委托可以用于处理事件或回调函数。并且,所有的委托类都是从 System.Delegate 类继承而来。 声明委托 声明委托时,需要定义能够被委托所引用的方法,任意委托可以引用与该委托拥有相同签名的方法。如: public delegate int MyDelegate (s
本文向大家介绍C#使用委托的步骤浅析,包括了C#使用委托的步骤浅析的使用技巧和注意事项,需要的朋友参考一下 本文浅析了C#使用委托的步骤。分享给大家供大家参考。具体分析如下: 委托可以理解为C或C++里面的函数指针,调用委托其实是调用被委托的方法。 简单的使用委托的步骤如下: 1.定义委托 2.声明委托 3.实例化委托 SetProgressBarValue1是被委托的方法名称,参数类型要和委托的
本文向大家介绍C#中委托(Delegates)的使用方法详解,包括了C#中委托(Delegates)的使用方法详解的使用技巧和注意事项,需要的朋友参考一下 1. 委托是什么? 其实,我一直思考如何讲解委托,才能把委托说得更透彻。说实话,每个人都委托都有不同的见解,因为看问题的角度不同。个人认为,可以从以下2点来理解: (1) 从数据结构来讲,委托是和类一样是一种用户自定义类型。 (2) 从设计
ILRuntime中使用委托 如果只在热更新的DLL项目中使用的委托,是不需要任何额外操作的,就跟在通常的C#里那样使用即可 如果你需要将委托实例传给ILRuntime外部使用,那则根据情况,你需要额外添加适配器或者转换器。 需要注意的是,一些编译器功能也会生成将委托传出给外部使用的代码,例如: Linq当中where xxxx == xxx,会需要将xxx == xxx这个作为lambda表达式
本文向大家介绍C#中的委托是什么?事件是不是一种委托?相关面试题,主要包含被问及C#中的委托是什么?事件是不是一种委托?时的应答技巧和注意事项,需要的朋友参考一下 答: 委托是将一种方法作为参数代入到另一种方法。 是,事件是一种特殊的委托。 //比如:onclick事件中的参数就是一种方法。