在 .NET 中,为什么事件连接顺序如此重要?

发布于 2024-12-09 07:19:38 字数 313 浏览 0 评论 0原文

using System;

static class Program
{
    static event Action A = delegate { };
    static event Action B = delegate { };

    static void Main()
    {
        A += B;
        B += ()=>Console.WriteLine("yeah");
        A.Invoke();
    }
}

这不会打印任何内容,但如果我交换 Main 的前两行,它就会打印任何内容。

using System;

static class Program
{
    static event Action A = delegate { };
    static event Action B = delegate { };

    static void Main()
    {
        A += B;
        B += ()=>Console.WriteLine("yeah");
        A.Invoke();
    }
}

This doesn't print anything, but if I swap the first two lines of Main, it does.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

神也荒唐 2024-12-16 07:19:38

事件是不可变的,即在赋值时你会得到一个副本,就像整数一样

int a = 1;
int b = 2;

a += b; // a == 3
b += 1; // a is still 3

Events are immutable, i.e. you get a copy when assigning, like integers

int a = 1;
int b = 2;

a += b; // a == 3
b += 1; // a is still 3
说不完的你爱 2024-12-16 07:19:38

A+=B;正在将 B 的代表列表追加到 A 中。
它是复制 B 的内容,而不是对 B 的引用。

它等同于:

A = (Action)System.Delegate.Combine(A, B);

所以顺序肯定很重要。

A += B; is appending the list of delegates from B into A.
It is copying the contents of B, not a reference to B.

It is the same as:

A = (Action)System.Delegate.Combine(A, B);

So the order is definitely important.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文