对委托的一些短浅理解

有这么一个功能,是根据不同的人来说不同的“早上好”。如果是按照以前的方法,我会这么做。

如:

#region 老办法
            public static void SayHi(string name, PeopleType type)
            {
                if (type == PeopleType.chinese)
                {
                    Console.WriteLine("早上好,{0}", name);
                }
                else
                    if (type == PeopleType.american)
                {
                    Console.WriteLine("Good Morning,{0}", name);
                }
            }
            #endregion

#region 参数
            public enum PeopleType
            {
                chinese = 0,
                american = 1
            }
#endregion

思考:

1、如果以后需要进行修改,还需要重新修改整个SayHi方法,有可能还会对其他地方有影响。

2、如果需要再添加一个英国版的早上好,更得需要添加很多代码,且容易对其他地方有影响。

*******************************经过改良的方法***********************

1、先声明一个带参数的委托

 public delegate void SayhiHandler(string name);

然后再新建一个类,其中有如下几个方法:

 public class Greeting
        {
            #region 新办法
            public static void SayHi(string name, SayhiHandler sayHi)
            {
                sayHi(name);
            }
            public static void SayHiChinese(string name)
            {
                Console.WriteLine("早上好,{0}", name);
            }
            public static void SayHiAmerican(string name)
            {
                Console.WriteLine("Good Morning,{0}", name);
            }
            #endregion

            #region 参数
            public enum PeopleType
            {
                chinese = 0,
                american = 1
            }
            #endregion
        }

经过委托,可按如下调用

            SayhiHandler sayHis = new SayhiHandler(Greeting.SayHiChinese);
            sayHis("张旭");

            SayhiHandler sayAmrican = new SayhiHandler(Greeting.SayHiAmerican);
            sayAmrican("Mr.Zxu");

************************************优点*********************************

如果再解决以上的那个问题,只需要再添加一个如SayHiAmerican的方法即可。

时间: 2024-08-06 22:55:56

对委托的一些短浅理解的相关文章

关于委托自己的一些理解(作为读书笔记)

以前提到委托,总感觉不好理解,简单意义是上说委托可以理解为函数的指针,可以把一个方法作为一个参数带入到另一个方法中.本人理解,请大牛指 1.首先看一个简单的例子 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DelegateDemo { public class Program { //声明一个猫叫,处理主人醒,老鼠跑 //public delegat

C#委托,简单粗暴理解

1. 委托个人的理解是 ,就是把方法作为参数传递给另一个方法,相当于中介,我要委托他做几件事情,首先定义一个中介,然后告诉他要做的事情 2. 委托的好处: 1.相当于用方法作为另一方法参数(类似于C的函数指针) 2.在两个不能直接调用的方法中作为桥梁,如:在多线程中的跨线程的方法调用就得用委托

C#中委托和事件的理解

看了张子阳博客后,总结了一下个人的理解,原文见:http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html 委托是可以把方法作为参数的一种东东. 把委托声明成与方法的返回值和参数一模一样. 然后把方法赋值给委托变量,委托变量就可以作为参数带入函数. 委托最主要的作用是实现C#中的事件. C#中的委托型事件需要遵守几个书写规范: 1.委托名称必须以EventHandler结尾.如:PlayEventHandler 2.委托必须声

委托 lambda表达式浅显理解

方法不能跟变量一样当参数传递,怎么办,C#定义了委托,就可以把方法当变量一样传递了,为了简单,匿名方法传递,省得再声明方法了:再简单,lambda表达式传递,比匿名方法更直观. public delegate int delegateArithmetic(int a, int b); //委托作为参数,方法传递给委托 public int result(int x,int y,delegateArithmetic delAri) { return delAri(x, y); } public i

iOS中 委托 代理 协议 的理解

1.协议:协议不是类,是一种约定,他声明的方法和属性,都是独立于其他任何特定的类,并本身不会去实现他,让使用他的类去实现他,比如UITableView,需要实现他的cellForRowAtIndexPath等协议,谁用谁知道. 协议的两个预编译指令@optional:可以选择的方法.@required:必须执行的方法. 我们打开UITableView的头文件,看下他的声明: @protocol UITableViewDataSource<NSObject> @required - (NSInt

浅谈对C#委托理解

刚进入公司不久,就上开始项目,对一个实习生来说还是有一些压力的,初入社会,对于我这个初级程序员来说要学的东西实在太多了,公司最近在做一个winform框架开发的桌面应用程序,众所周知,winform也好,webform也好,里面随处可见的事件驱动,有事件,当然也少不了委托,感觉之前对委托这个概念的理解一直是模模糊糊的,口里都会背的那么几句话:"委托可以把方法当作参数在另一个方法中传递和调用","委托是方法的快捷方式"等等.但是真要深入理解,灵活运用,还是要有良好的代

12-14面向对象--抽象基类、接口、委托

一.抽象类与抽象方法 1.在一个类前面加上abstract关键字,此类就成为了抽象类. 1)当一个类变成抽象类时,就不能作为一个对象使用了,也就是说不能创建新对象,不能new初始化. 2)抽象方法只是一个方法,不能写方法. 3)当一个类继承的是抽象类时,必须要把抽象类的抽象方法重写(override)才可以实现方法. 4)抽象方法必须放在抽象类里面才能使用,抽象方法是在抽象子类中实现的,也就是说抽象子类实现抽象父类所有的抽象方法. 5)有抽象方法的一定是抽象类:有抽象类但不一定有抽象方法. 6)

.NET基础拾遗(4)委托、事件、反射与特性

Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 一.委托基础 1.1 简述委托的基本原理 委托这个概念对C++程序员来说并不陌生,因为它和C++中的函数指针非常类似,很多码农也喜欢称委托为安全的函数指针.无论这一说法是否正确,委托的的确确实现了和函数指针类似的功能,那就是提供了程序回调指定方法的机制. 在委托内部,包含了一个指向某个方法的指针(这一点上委托实现机制和C++的函数指针一致),为何称其

C#语法糖之第六篇: 泛型委托- Predicate&lt;T&gt;、Func&lt;T&gt;

今天继续分享泛型委托的Predicate<T>,上篇文章讲了Action委托,这个比Action委托功不一样的地方就是委托引用方法是Bool返回值的方法,Action为无返回值.首先我们看一下它的定义吧: 1 public delegate bool Predicate<T>(T obj); 从其定义可以看到,此委托引用一个返回bool 值的方法,在实际开发中,通常使用Predicate<T>委托变量引用一个“判断条件函数”,在判断条件函数内部书写代码表明函数参数所引用