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

  • 什么是委托
  • 委托怎么用
    • 定义委托类型
    • 声明委托对象
    • 创建委托对象确定与哪些方法进行绑定
    • 使用委托调用方法
    • 使用委托注意事项
  • 为什么用委托
  • 总结

     最近在做的项目,正在进行重构,之前的框架就是纯三层的简单调用,外加一些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

时间: 2024-11-03 07:13:40

C#----委托和事件(一)的相关文章

从反射看委托与事件 委托真的是一个类

关于委托与事件,网上介绍得非常之多,在此不再赘述,本人最近需要捣鼓一些委托,因而对委托进行一 定的寻根究底,故用反射把委托的成员揪出来,且看如下代码: delegate void DelegateDemo(); static event DelegateDemo delHandle; static void Main() { delHandle += new DelegateDemo(MyDelegate_delHandle); MemberInfo[] mis = delHandle.GetT

C#委托和事件

委托和事件 .NET Framework 还可以广泛地将委托用于事件处理任务,如 Windows 或 Web 应用程序中的按钮 Click 事件.Java 中的事件处理通常通过实现自定义侦听器类完成,而 C# 开发人员则可以利用委托处理事件.事件的声明类似于具有委托类型的字段,区别在于事件声明前面有 event 关键字.事件通常被声明为 public,但允许使用任何可访问性修饰符.下面的示例演示了 delegate 和 event 的声明. C#  =复制代码 // Declare the de

你可能不知道的陷阱:C#委托和事件的困惑

一. 问题引入          通常,一个C语言学习者登堂入室的标志就是学会使用了指针,而成为高手的标志又是"玩转指针".指针是如此奇妙,通过一个地址,可以指向一个数,结构体,对象,甚至函数.最后的一种函数,我们称之为"函数指针"(和"指针函数"可不一样!)就像如下的代码: int func(int x); /* 声明一个函数 */ int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋

C#中委托,事件理解入门

目录 l        导论 l        什么是委托 l        事件的理解 l        事件 关键字 l        最后     导论     在学习C#中的委托和事件过程中,我读了许多文章来理解他们二者究竟是怎么一回事,以及如何使用他们,现在我将整个的理解过程陈述以下,我学到的每一方面,恐怕也是你们需要掌握的 :-). 什么是委托?     委托和事件这两个概念是完全配合的.委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成.委托是一个类,当你对它实例

C#编程利器之四:委托与事件(Delegate and event) (上)

本文试图在.net Framework环境下,使用C#语言来描述委托.事件的概貌.希望本文能有助于大家理 解委托.事件的概念,理解委托.事件的用途,理解它的C#实现方法,理解委托与事件为我们带来的好处 .C#是一种新的语言,希望大家能通过本文清楚地看到这些,从而可以对委托.事件等技术进行更深入的 理解和探索. 一. 委托 委托的本质 --在C#中,委托是一个特殊的类: --在某种程度上,相当于C++的函数指针: --在某种程度上,相当于接口(Interface): 委托的定义 --关键字:del

C#3.0笔记(二)预备知识之委托与事件

在上篇blog中简单地介绍了委托的基础知识,在这片文章中会介绍下委托跟 事件之间的联系. 事件的由来 我们可以看到在使用委托进行回调 的实现的时候,我们往往需要再定义一个委托对象,以及一个对外公开的辅助方 法来添加委托的方法,这样子会使我们感觉比较繁琐.C#提供了event关键字来 减轻直接使用委托的负担,编译器会自动提供注册.取消注册的方法和委托必要 的成员.首先来看看定义事件的步骤: 1.先定义委托类型: 2.通 过event关键字定委托类型的事件. public delegate int

编写高质量代码改善C#程序的157个建议[C#闭包的陷阱、委托、事件、事件模型]

原文:编写高质量代码改善C#程序的157个建议[C#闭包的陷阱.委托.事件.事件模型] 前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议38.小心闭包中的陷阱 建议39.了解委托的实质 建议40.使用event关键字对委托施加保护 建议41.实现标准的事件模型 建议38.小心闭包中的陷阱 首先我们先来看一段代码: class Program { static void Main(string[] arg

从使用层面上了解委托和事件的区别

从本篇文章中,我们将从代码层面知道委托和事件的差异和用处,并且我们不会用猫和老鼠之类奇怪的比喻来混淆大家. 首先,我们知道委托和事件都可以用来调用跟自己方法签名一样的方法.容易混淆大家的地方大多在于这两者之间的区别.从我们使用委托delegate和事件event上的主要有两大区别(如表1所示).                           表1 委托和事件的区别 序号 区别 委托 事件 1 是否可以使用=来赋值 是 否 2 是否可以在类外部进行调用 是 否 3 是否是一个类型 是 否,事

c#-C# 委托与事件 有点小问题

问题描述 C# 委托与事件 有点小问题 class Class1 { static void ChineseGreeting(string name) { Console.WriteLine("早上好,",name); } static void EnglishGreeting(string name) { Console.WriteLine("Good morning,",name); } static void Main(string[] args) { Gre