gpt4 book ai didi

c# - 为什么我无法编译在 C# 的类接口(interface)中声明的自定义事件

转载 作者:太空狗 更新时间:2023-10-30 00:57:35 27 4
gpt4 key购买 nike

假设我有这个:

public interface ISlider {
event CustomEventDelegate CustomEvent;

在我实现 ISlider 的类中,我尝试了这个

public CustomEventDelegate  CustomEvent = delegate { };

但是它说 CustomEvent 没有实现。

我需要做的是这样的:

   ISlider ISlider;
ISlider = slider as ISlider;
if (ISlider != null)
{
ISlider.CustomEvent += new CustomEventDelegate(MyCustomEventHandler);
}
else
{
// standard control
this.slider.ValueChanged += new RoutedPropertyChangedEventHandler<double>(this.slider_ValueChange);
}

最佳答案

简单地说 - 这是一个字段,而不是一个事件

一个事件实际上是一对方法(就像一个属性的工作方式)——但是像事件这样的字段使它变得微不足道(你甚至可以包括你的默认非空值值(value),这是(我假设)你的意图:

public event CustomEventDelegate CustomEvent = delegate { };
^^^^^ <==== note the addition of "event" here

这翻译几乎像:

private CustomEventDelegate customEvent = delegate { };
public event CustomEventDelegate CustomEvent {
add { customEvent += value;}
remove { customEvent -= value;}
}

我说“几乎”是因为类似字段的事件还包含一些线程安全代码,这些代码很少需要但很难解释(并且根据您使用的编译器版本而有所不同)。

当然,在我看来最好不要使用这个,只检查事件是否为空:

var snapshot = EventOrFieldName;
if(snapshot != null) snapshot(args);

实现这个接口(interface)的例子:

public interface ISlider
{
event CustomEventDelegate CustomEvent;
}
public class MyType : ISlider
{
public event CustomEventDelegate CustomEvent = delegate { };
}

关于c# - 为什么我无法编译在 C# 的类接口(interface)中声明的自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776608/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com