通过事件订阅

时间:2016-09-13 13:24:07

标签: c# .net events

我无法找到关于此案例的文档,所以我很高兴知道这种行为是否有意,如果是,我可以在哪里找到它。

用例很简单:方法采用可选参数。在普通方法调用中,如果在方法调用中省略了参数,则将参数设置为指定的默认值。

将方法挂钩到不提供可选参数的事件也是有效的(请参阅下面的代码示例)。但是,这会导致意外行为:而不是表现相同(将参数初始化为指定的默认值),它实际上将其设置为其他内容。

以下断言将失败。我使用Unity的NUnit包装器在Unity3D 5.3.5f1中对此进行了测试,但我非常有信心这不应该是针对Unity的。

我希望这个问题不是太广泛,但我真的很感兴趣为什么会出现这种情况,以及是否在某处记录。

谢谢!

using NUnit.Framework;
using System;

public class EventWithOptionalParametersTests {

    [Test]
    public void Test() {

        Foo foo = new Foo();
        foo.OnEvent += this.HandleFooEvent;
        foo.FireEvent();

    }

    private void HandleFooEvent(bool optional = false) {
        Assert.AreEqual(false, optional); //assertion fails, optional = true
    }


    class Foo {
        public event Action OnEvent;

        public void FireEvent() {
            if(this.OnEvent != null) {
                this.OnEvent();
            }
        }

    }
}

0 个答案:

没有答案