我有一些代码如下所示:
public class Child : Parent
{
public event Action<string> OnEventTriggered;
}
public class Parent
{
protected virtual void OnEventTriggered( double x ) { }
}
编译器显示警告消息:
&#39; Child.OnEventTriggered&#39;隐藏继承的成员&#39; Parent.OnEventTriggered(double)&#39;。如果要隐藏,请使用new关键字。
虚拟方法与事件名称共享同名。
虚方法的Param类型是double,Action是字符串类型。
为什么违反了检查规则?
感谢您提前回答。
其他方案:
如果我将代码更改为此代码,则不会显示任何警告。
这些代码之间的区别是什么?
public class Child : Parent
{
public void OnEventTriggered( string x ) { }
}
public class Parent
{
protected virtual void OnEventTriggered( double x ) { }
}
答案 0 :(得分:2)
因为名称相同。由于您未添加任何覆盖或新关键字,因此编译器假定您不了解基类属性/方法,并向您发出警告。
更改派生类中事件的名称,不会违反规则。
通常情况下,事件以下列方式实现,所有事件都在同一个类中:
public class EventDemo {
public event EventHandler SomeEvent;
protected virtual void OnSomeEvent() {
var someEvent = SomeEvent;
if (someEvent != null) {
someEvent(this, EventArgs.Empty);
}
}
}