欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

asp.net 委托 有大用 有大大用 有大大大用

委托

委托是一个可以对方法进行引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。
委托的类型是安全的,给定委托的实例可以表示任何类型的任何对象上的实例方法或静态方法--只要方法的签名匹配于委托的签名即可。

实现一个delegate是很简单的,通过以下3个步骤即可实现一个delegate:

1.声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。
2. 创建delegate对象,并将你想要传递的函数作为参数传入。
3. 在要实现异步调用的地方,通过上一步创建的对象来调用方法。using System;

public class MyDelegateTest
{
// 步骤1,声明delegate对象
public delegate void MyDelegate(string name);
// 这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型
public static void MyDelegateFunc(string name)
{
Console.WriteLine("Hello, ", name);
}
public static void Main()
{
// 步骤2,创建delegate对象
MyDelegate md = new MyDelegate(MyDelegateTest.MyDelegateFunc);
// 步骤3,调用delegate
md("sam1111");
}
}
输出结果是:Hello, sam1111

             

来自  https://blog.csdn.net/weixin_47914856/article/details/106771018

  


[转]ASP.NET中的委托例子

1.定义

  委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数为返回值。简单理解Delegate委托(或代理)是一种数据类型:它的变量可以引用到某一个符合要求的方法上,通过委托可以间接地调用该方法。

2.使用

使用委托的四部曲:

  • 定义一种委托类型

  • 委托执行时要调用方法

  • 定义一个委托实例

  • 委托实例的调用

我们可以这样子认为:委托是一个类,它定义了方法的类型,使得可以将方法当作别一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

3.自定义委托

前面的话有点难理解,接下来我们通过具体的例子分析一下何谓委托,该如何实现委托。现在不是很喜欢搞多国语言化的吗?看看如何让我们的程序会说多种语言吧。

复制代码
 1         /// <summary>
 2         /// the English speaker.
 3         /// </summary>
 4         /// <param name="name">The name.</param>
 5         public void EnglishSpeaker(string name)
 6         {
 7             Console.WriteLine(
 8                 string.Format("Hello my name is {0} and I am English speaker.\n", name));
 9         }
10         /// <summary>
11         /// the Chineses speaker.
12         /// </summary>
13         public void ChineseSpeaker(string name) 
14        {
15             Console.WriteLine(
16                 string.Format("您好我的名字叫{0},我是讲普通话的。\n", name));
17         }
复制代码

好啦现在我们有两个方法分别是说普通话和英语,现在我们的程序会说普通话和英语啦。现在我们考虑究竟什么时候讲普通话什么时候讲英语,那不简单我们加个判断就OK啦,是的我们可以通过switch或者if else就可以实现啦。

复制代码
 1         /// <summary>
 2         /// 根据上下文调用不同的方法
 3         /// </summary> 
 4         /// <param name="name">string</param>
 5         /// <param name="lang">enum</param>
 6         private static void Say(string name, Language lang)
 7         {
 8             switch (lang)
 9             {
10                 case Language.Chinese:
11                     Program.ChineseSpeaker(name);
12                     break;
13                 case Language.English:
14                     Program.EnglishSpeaker(name);
15                     break;
16                 default :
17                     break;
18             }
19         }
复制代码

但假设我们现在又要增加新的语言西班牙语,同样我们可以增加西班牙语,但我们必须修改switch语句增加判断,这不符合OOP中的OCP(对扩展开放,对修改关闭原则),这时候委托该登场。

 

1         /// <summary>
2         /// Define speak delegate.
3         /// </summary>
4         /// <param name="name"></param>
5         private delegate void SpeakDelegate(string name);

首先我们定义了一种委托类型SpeakDelegate,然后我们通过修改Say方法看看该如何使用委托变量。

 

复制代码
 1         /// <summary>
 2         /// The base say function.
 3         /// </summary>
 4         /// <param name="name">The name.</param>
 5         /// <param name="speaker">The speaker.</param>
 6         private static void Say(string name, SpeakDelegate speaker)
 7         {
 8             ///Inoke the speaker function.
 9             speaker(name);
10         }
复制代码

现在我们的参数已经不是枚举类型了,而是一个委托类型变量,而且实现的具体代码也没有了switch语句了,比之前简单了许多。现在大家知道如何去调用Say方法吧!没错我们只需传递一个name和一个具体实现函数名就OK了。

1             ///传递函数名进行委托方法绑定
2             Program.Say("钧航", ChineseSpeaker);
3             Program.Say("JK.Rush", EnglishSpeaker);

来自  https://www.cnblogs.com/seasons1987/archive/2012/10/23/2735600.html




普通分类: