C#----委托和事件(一)

简介: <div class="markdown_views"><p></p><div class="toc"><ul><li><a href="#%E4%BB%80%E4%B9%88%E6%98%AF%E5%A7%94%E6%89%98">什么是委托</a></li><li><a href="#%E5%A7%94%E6%89%98%E6%80%8E%E4%B9%88%E7

     最近在做的项目,正在进行重构,之前的框架就是纯三层的简单调用,外加一些Session,SQLHelper等封装管理类,其他的东西,一直也想去抽象,但是奈何能力还有所欠缺,抽象出来的东西,被组长狠狠的给鄙视了一番,最近在组长的带领下,重新搭建框架,整个过程下来,真的是被狠狠的打击了,也真是服了我们组长了,太牛了,看来自己欠缺的还是很多很多。具体的框架,后期熟悉了在给大家介绍,现在还是有点懵懵哒。
     在跟组长交流的时候,组长说让我们多用委托,在之前做项目的时候貌似用到过,不过印象不大,在狠狠的恶补下C#的一些知识点!在网上查了一些关于委托和事件的资料,委托和事件在.Net Framework中的应用还是非常广泛的,有的人说,对于接触C#时间不长的人来说较好的理解委托和事件并不容易,它们一道门槛儿,过了这个槛儿的人,觉得真是太容易了,而没有走过这道门槛的人,每次见到委托和就觉得心里特别的别的慌,浑身不自在。确实是,不过学什么也都是这个理,你得懂得去坚持,主动的多想,多总结,有付出才会有回报!

什么是委托?


     从字面上讲,委托两个字,中国人都应该知道什么意思,除非不认识这两个字,比如说:我委托你照看我家小猫。
     但是在我们的程序世界里,也是这么的简单吗?委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法,即委托可以调用它所指的方法。一句话,将方法作为方法的参数。

委托怎么用?


定义委托类型

delegate void OrderDelegate(string name);

声明委托对象

 public static void GetOrder(string name)
        {
            Console.WriteLine("{0}到楼下帮我取下外卖!", name);
        }

        public static void BuyOrder(string name)
        {
            Console.WriteLine("{0}帮我定个外卖!", name);
        }

创建委托对象(确定与哪些方法进行绑定)

 public static void GetOrBuyOrder(string name, OrderDelegate orderDelegate)
        {
            orderDelegate(name);
        }

使用委托调用方法

 static void Main(string[] args)
        {
            OrderDelegate orderDel;
            orderDel = GetOrder;
            orderDel += BuyOrder;
            GetOrBuyOrder("ling", orderDel);
            Console.ReadKey();
        }

使用委托注意事项

  • 委托和方法必须具有相同的参数。
  • 委托可以调用多个方法,即一个委托对象可以维护一个可调用方法的列表而不是单独的一个方法,称为多路广播(多播)。
  • 使用+=和-=运算实现方法的增加和减少

为什么用委托?


为什么要用委托呢,委托有什么样的好处呢?咱们通过例子来说明,我们想在屏幕上输出一句问候语:

public void GreetPeople(string name) {
    '''做某些额外的事情,比如初始化之类,此处略'''
    EnglishGreeting(name);
}
'''英文版问候语'''
public void EnglishGreeting(string name) {
    Console.WriteLine("Morning, " + name);
}

'''中文版问候语'''
public void ChineseGreeting(string name){
    Console.WriteLine("早上好, " + name);
}

public enum Language{
    English, Chinese
}

public void GreetPeople(string name, Language lang){
    '''做某些额外的事情,比如初始化之类,此处略'''
    swith(lang){
        case Language.English:
           EnglishGreeting(name);
           break;
       case Language.Chinese:
           ChineseGreeting(name);
           break;
    }
}

上面的这个方法尽管能够把问题解决,但是这个解决方案的可扩展性很差,如果日后我们需要再添加韩文版、日文版,就不得不反复修改枚举和GreetPeople()方法,以适应新的需求。

总结


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

转载请注明出处:http://blog.csdn.net/zlts000/article/details/48324769

相关文章
|
3月前
|
C#
C#一分钟浅谈:委托与事件的实现方式
本文详细介绍了C#编程中委托与事件的基础知识及应用场景。首先解释了委托的概念,包括定义与使用方法;接着介绍了事件这一基于委托的特殊类型,展示了如何在类中定义事件及跨类订阅与处理事件;最后讨论了常见问题如事件未处理异常、重复订阅及内存泄漏等,并提出了相应的解决方案。通过本文,读者将全面掌握委托与事件的使用技巧,提升应用程序的设计与开发水平。
123 7
|
4月前
|
C#
由浅入深理解C#中的事件
由浅入深理解C#中的事件
110 19
|
4月前
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
66 4
|
4月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
84 0
|
4月前
|
C#
C#中的委托(一)
C#中的委托(一)
38 1
|
4月前
|
存储 算法 安全
C#语言进阶(二)—事件全解
C#语言进阶(二)—事件全解
38 0
|
4月前
|
C# C++
C#语言进阶(一)—委托
C#语言进阶(一)—委托
50 0
|
7月前
|
存储 安全 C#
C# - 委托与事件
这篇文档介绍了C#中的委托和事件。委托是存储方法引用的类型,支持回调、事件处理,具有引用方法、类型安全、多播性等特性,并在异步编程中发挥作用。事件是委托的封装,提供保护和订阅机制,防止外部直接访问。当需要在类内部控制方法调用,防止外部误触发时,可使用事件。
|
6月前
|
C#
C#||委托和事件的实例
C#||委托和事件的实例
|
7月前
|
C#
c#委托详解
c#委托详解
38 0