C#实现与事件的接口

时间:2017-08-24 12:23:10

标签: c# interface

我有和界面如下所示:

public delegate void ScriptFinished();

public interface IScript
{
    event ScriptFinished ScriptFinishedEvent;
}

现在我想实现如下所示的界面:

public class Script : IScript
{
    event ScriptFinished ScriptFinishedEvent;
}

但我得到错误:

  

'Script.ScriptFinishedEvent'无法实现接口成员,因为   它不公开。

好的,我将public添加到活动中:

public interface IScript
{
    public event ScriptFinished ScriptFinishedEvent;
}

但错误是:

  

修饰符'public'对此项无效

我在这里做错了什么以及如何实现与事件的接口?

2 个答案:

答案 0 :(得分:9)

变化:

public class Script : IScript
{
    event ScriptFinished ScriptFinishedEvent;
}

为:

public class Script : IScript
{
    public event ScriptFinished ScriptFinishedEvent;
}
  

'Script.ScriptFinishedEvent'无法实现接口成员   因为它不公开。

指的是class,而不是interface

答案 1 :(得分:0)

接口实现必须公开:

public class Script : IScript
{
    public event ScriptFinished ScriptFinishedEvent;
}

但是,如果要限制特定类的访问权限,则可以隐藏它。这是最接近私密的:

public class Script : IScript
{
    event IScript.ScriptFinished ScriptFinishedEvent;
}

在这种情况下,仍然可以访问ScriptFinishedEvent,但您必须先将其转换为IScript。 (例如,C#的Array.Add()实现了IList