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)
        {

            GreeteManager gm = new GreeteManager();
            gm.Delegate1 = ChineseGreeting;     //把=换成+=并不会报错
            gm.Delegate1 += EnglishGreeting;
            gm.GreetPeople("zz");
            Console.ReadKey();
        }
    }
    public class GreeteManager
    {
        public delegate void GreetingDelegate(string name);
        public GreetingDelegate Delegate1;
        public void GreetPeople(string name)
        {
            if (Delegate1 != null)
            {
                Delegate1(name);
            }
        }
    }


为什么结果是这样的,还有就是当我把第一个 = 改为 += ,并不会报错,仍能得出和原来一样的结果,这又是为什么。
代码是照着http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx ,边学边敲,验证性学习

解决方案

你应该是想知道 为什么输出的 没有“ZZ是吧”
那是因为 委托关联的两个方法 输入语句 写的有问题
应该写成这样
Console.WriteLine("早上好,"+name);
不是下面那样的
Console.WriteLine("早上好,",name);
有点 小马虎了吧

解决方案二:

GreeteManager gm = new GreeteManager(); //实例化
gm.Delegate1 = ChineseGreeting; //这里是意思是把方法挂载到你的委托上
gm.Delegate1 += EnglishGreeting;

//同理也是挂载,当你挂载多个时,它会按挂载顺序执行,既然可以挂载也可以卸载-=就可以实现,当然第一次是不允许-=不然会报错
gm.GreetPeople("zz");//开始执行委托
Console.ReadKey();

解决方案三:

=表示将一个委托对象赋值给委托变量;+=表示将一个委托对象添加到委托链上。两者的区别就在于=是替换原来的(如果有),
+是在把原来的跟新的委托对象连接在一起(委托链)。调用的时候“+“会调用委托链上所有的委托。

解决方案四:

第一个问题,改成这样即可
static void EnglishGreeting(string name)
{
Console.WriteLine("Good morning,{0}", name);
}
第二个问题
GreeteManager gm = new GreeteManager();
gm.Delegate1 = ChineseGreeting; //把=换成+=并不会报错
gm.Delegate1 += EnglishGreeting;
第一句是创建一个委托,第二句是给委托初始化,第三句是给委托增加一个方法。当“=”换成“+=”可以理解为直接给一个空的委托增加一个方法
效果是一样的。

解决方案五:

C# 中的委托和事件
c#中的委托和事件
c#委托与事件

解决方案六:

你应该是想知道 为什么输出的 没有“ZZ是吧”
那是因为 委托关联的两个方法 输入语句 写的有问题
应该写成这样
Console.WriteLine("早上好,"+name);
不是下面那样的
Console.WriteLine("早上好,",name);

时间: 2024-11-18 13:58:14

c#-C# 委托与事件 有点小问题的相关文章

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

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

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

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

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

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

编写高质量代码改善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

[C#]委托和事件(详细讲解)

引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在.本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论. 将方法作为方法的参数 我们先不管这个标题

解惑答疑:C#委托和事件

相信很多人一直为C#委托和事件所困惑,尤其是C#的初学者,学到这一部分会感觉比较困难,很有可能就放弃了,而且.NET对委托和事件封装得挺好,一般都不怎么用到自定义的委托和事件,所以放弃学习该技术就有了借口! 网上也有不少此类的文章,最具代表性的是张子阳的C#中的委托和事件这篇,写得的确很好,得到很多读者的赞赏,但我看评论,还是发现了些问题,因为有不少读者是看了一遍又一遍,每次感觉都蛮好,可是隔一段时间,对"委托和事件"又迷糊了,于是又来看!我真搞不懂,为什么会出现这种情况!后来想想,文

大白话系列之C#委托与事件讲解(一)

    从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的.首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个意思,除非委托2个中文字不认识,举个例子,小明委托小张去买车票.     但是在我们的程序世界里,也是这么的简单吗?当然,什么是OO,OO就是现实世界的抽象,所有现实世界的事物,在OO里都能得到很好的诠释,不好意思,扯远了......     那我们就单刀直入吧,如果同学们不嫌烦的话,可以看

艾伟_转载:解惑答疑:C#委托和事件

相信很多人一直为C#委托和事件所困惑,尤其是C#的初学者,学到这一部分会感觉比较困难,很有可能就放弃了,而且.NET对委托和事件封装得挺好,一般都不怎么用到自定义的委托和事件,所以放弃学习该技术就有了借口! 网上也有不少此类的文章,最具代表性的是张子阳的C#中的委托和事件这篇,写得的确很好,得到很多读者的赞赏,但我 看评论,还是发现了些问题,因为有不少读者是看了一遍又一遍,每次感觉都蛮好,可是隔一段时间,对"委托和事件"又迷糊了,于是又来看!我真搞不懂,为什 么会出现这种情况!后来想想

C#委托和事件

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