using System;
public class SamplesDelegate {
public delegate String myMethodDelegate( int myInt );
public class mySampleClass {
public String myStringMethod ( int myInt ) {
if ( myInt > 0 )
return( "positive" );
if ( myInt < 0 )
return( "negative" );
return ( "zero" );
}
public static String mySignMethod ( int myInt ) {
if ( myInt > 0 )
return( "+" );
if ( myInt < 0 )
return( "-" );
return ( "" );
}
}
public static void Main() {
mySampleClass mySC = new mySampleClass();
myMethodDelegate myD1 = new myMethodDelegate( mySC.myStringMethod );
myMethodDelegate myD2 = new myMethodDelegate( mySampleClass.mySignMethod );
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 5, myD1( 5 ), myD2( 5 ) );
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", -3, myD1( -3 ), myD2( -3 ) );
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 0, myD1( 0 ), myD2( 0 ) );
}
}
/*
This code produces the following output:
5 is positive; use the sign "+".
-3 is negative; use the sign "-".
0 is zero; use the sign "".
*/
//Declaramos
public delegate void stackOverFlowEsDelegado(string mensaje, int cantidadVeces);
//Instanciamos
stackOverFlowEsDelegado delegadoDeEjemplo = new stackOverFlowEsDelegado(stackOverFlowEs);
//invocamos
delegadoDeEjemplo("ejemplo de delegado en stackoverflow ES", 5);
简而言之,委托是指向函数的指针。
也就是说,假设您可以创建一个函数并将其分配给一个变量,以将其作为参数传递到您需要的地方。当然,继承了 CLR 的所有特性,包括安全性和强类型。
微博:
msdn:代表(C# 编程指南)
示例 (msdn)
委托是包含对方法的引用的对象。
要创建委托,必须指明参数和返回类型是什么,例如:
Operacion
与任何返回 adouble
并且只有一个 type 参数的方法兼容double
,如下所示:将方法分配给类型变量
Operacion
会创建委托的实例:最后我们可以使用该实例来调用它引用的方法:
在 C# 中,委托通常用于事件中,并作为回调在应用程序的不同部分之间进行动态通信。回调和委托是如此普遍,以至于在 C# 3 中以lambda 表达式的形式添加了一种新的、更紧凑的语法来表示委托:
尽管委托行为可以通过接口来模拟,但它们还有一个称为多播的附加功能,这意味着单个实例可以引用多个方法,例如:
现在,当调用
d
这两个方法时,它们将被调用,它们被调用的顺序与它们被添加到委托列表中的顺序相同。使用委托和回调的一个明显例子是LINQ,该类型
List<T>
有许多接受委托(或 lambda 表达式)并执行不同操作的方法:在这种情况下,该方法
Find
接受一个带有一个参数int
和返回类型的委托类型bool
,通过这个回调我们在列表中找到奇数。委托是C#声明函数为函数指针的类型的方式。委托允许您将签名分配给名称,以便基于该名称创建的所有变量都能够存储指向与该签名兼容的函数的指针。
基于委托的变量可以指向类的成员函数或
lambda
.使用代表有什么意义?另一种方法是在每次使用时写签名而不是委托。例如看低级语言,如c或c++。在这些情况下,没有委托的概念。
typedef
但是,由于在多个位置编写函数签名会创建复杂的代码来管理,我们选择为使用或最近using
(在c++11中)的函数分配别名。这些别名相当于C# delegate 。不仅仅是一个类比,我不知道用简单的话来说它们对我来说是否适合你:委托允许你将一个方法作为参数发送给另一个方法。
根据msdn:
例子:
在本文中,您有一个很好的委托委托 C# 示例
使用委托
委托的功能是允许您在应用程序的其他线程中操作或使用对象,否则在尝试访问它时,它将返回错误,或者至少这是我通常使用委托的目的。
我希望我对你有所帮助,问候。
C# 中的委托就像一种指向方法的数据类型,因此允许我们扩展代码的功能或允许其他人这样做。声明委托的方式如下:delegate()。