为什么此事件无法输出预期结果?

时间:2017-07-12 01:36:56

标签: c# events

我正在制作关于“事件”的一些做法。用C#编程。从教科书中复制了一个示例程序之后,就像本书所说的那样无法正常工作。我检查了几次,但仍然无法找到错误的位置。如果有人能帮助我解决这个问题,我将不胜感激。

using System;
delegate void Handler();

class Incrementer
{
    public event Handler CountedADozen;

public void DoCount()
 {
    for (int i = 1; i < 100; i++)
        if (i % 12 == 0 && CountedADozen != null)
            CountedADozen();
 }
}

class Dozens
{
public int DozensCount { get; private set; }
public Dozens(Incrementer incrementer)
 {
    DozensCount = 0;


    Incrementer.CountedADozen += IncrementDozensCount;
 }
void IncrementDozensCount()
 {
    DozensCount++;
 }
}

class program
{
static void Main()
 {
    Incrementer incrementer = new Incrementer();
    Dozens dozensCounter = new Dozens(incrementer);

    incrementer.DoCount();
    Console.WriteLine("Number of dozens={0}", dozensCounter.DozensCount);
 }
}

如您所见,预期结果应为8,但结果为0。

1 个答案:

答案 0 :(得分:1)

你有两个增量器,一个被传递给你的构造函数(并且没有被使用),del增量器正在侦听,但是永远不会在它上面调用DoCount。

删除del增量器并将del.CountedADozen替换为incrementer.CountedADozen,因为这是您要在此设计模式中使用的增量器。