为什么我不能编译自定义事件在C#中的类接口中声明 [英] Why I cannot compile a Custom Event declared in a Class Interface in C#

查看:232
本文介绍了为什么我不能编译自定义事件在C#中的类接口中声明的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

让我们说我有这样的:

 公共接口ISlider {
    事件CustomEventDelegate自定义事件;
 

在这里我实现ISlider类的,我想这

 公共CustomEventDelegate自定义事件委托= {};
 

但它说,自定义事件未实现。

我需要做的是这样的:

  ISlider ISlider;
    ISlider =滑块作为ISlider;
    如果(ISlider!= NULL)
    {
        ISlider.CustomEvent + =新CustomEventDelegate(MyCustomEventHandler);
    }
    其他
    {
        //标准控制
        this.slider.ValueChanged + =新RoutedPropertyChangedEventHandler<双>(this.slider_ValueChange);
    }
 

解决方案

简单 - 这是一个的字段的,不是的事件

事件其实是一对方法(怎么样一个属性工程) - 但的字段类似事件的作出这样的小事(你甚至可以包括默认非空值,这是(我认为)你的意图:

 公共事件CustomEventDelegate自定义事件委托= {};
       ^^^^^< ====注意,除了活动在这里
 

这是翻译的几乎的,如:

 私人CustomEventDelegate自定义事件委托= {};
公共事件CustomEventDelegate自定义事件{
    添加{自定义事件+ =值;}
    除去{自定义事件 -  =值;}
}
 

我说几乎是因为字段的事件还包括一些线程安全code,这是很少必要的,但棘手的解释(并取决于哪一个版本,你所使用的编译器)。

当然,在我看来,这是最好不要用这个的所有的,只是检查事件对空:

  VAR快照= EventOrFieldName;
如果(!快照= NULL)快照(参数);
 


实现此接口的实例:

 公共接口ISlider
{
    事件CustomEventDelegate自定义事件;
}
公共类MyType的:ISlider
{
    公共事件CustomEventDelegate自定义事件委托= {};
}
 

Let's say I have this:

public interface ISlider {
    event CustomEventDelegate CustomEvent;

In the class where I implements ISlider, I tried this

public CustomEventDelegate  CustomEvent = delegate { };

But it says that CustomEvent is not implemented.

I need to do is something like this:

   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);
    } 

解决方案

Simply - that is a field, not an event.

An event is actually a pair of methods (like how a property works) - but field like events make that trivial (you can even include your default non-null value, which is (I assume) your intent:

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

That translates almost like:

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

I say "almost" because field-like events also include some thread-safety code, which is rarely needed but tricky to explain (and varies depending on which version of the compiler you are using).

Of course, in my opinion it is better to not use this at all, and just check the event for null:

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


Example of implementing this interface:

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

这篇关于为什么我不能编译自定义事件在C#中的类接口中声明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆