首页 > 解决方案 > 被覆盖的事件仍然是原始值

问题描述

我在覆盖 C# 中的事件时遇到问题。我希望被SubEventTest覆盖的OnMyEvent事件替换EventTest's OnMyEvent。然而OnMyEventon和 onSubEventTest是一样的EventTest,即使尝试不同的标准值EventTest's也是如此OnMyEvent

这是一些显示我的问题的代码:

void Main()
{   
    SubEventTest subEventTest = new SubEventTest();
    subEventTest.Call(); // Null reference exception (should be Hello!)

    EventTest eventTest = new EventTest();
    eventTest.Call(); // Null reference exception (as expected)
}

public class EventTest
{
    public delegate void MyEventHandler();
    public void Call() => OnMyEvent();
    public virtual event MyEventHandler OnMyEvent = null;
}

public class SubEventTest : EventTest
{
    public override event MyEventHandler OnMyEvent =
        delegate ()
        {
            Console.WriteLine("Hello!");
        };
}

预期的输出是:

Hello!
Null reference exception

实际输出为:

Null reference exception

为什么会这样,我怎样才能得到预期的输出?

标签: c#.netoverriding

解决方案


推荐阅读