我有和界面如下所示:
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'对此项无效
我在这里做错了什么以及如何实现与事件的接口?
答案 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
)