【发布时间】:2010-02-15 18:27:06
【问题描述】:
关于C#语言设计的小问题:))
如果我有这样的界面:
interface IFoo {
int Value { get; set; }
}
可以使用 C# 3.0 自动实现的属性显式实现此类接口:
sealed class Foo : IFoo {
int IFoo.Value { get; set; }
}
但如果我在界面中有事件:
interface IFoo {
event EventHandler Event;
}
并尝试使用类似字段的事件显式实现它:
sealed class Foo : IFoo {
event EventHandler IFoo.Event;
}
我会得到以下编译器错误:
error CS0071: An explicit interface implementation of an event must use event accessor syntax
我认为类场事件是自动实现属性的某种二元性。
所以我的问题是:这种限制的设计原因是什么?
【问题讨论】:
-
我确信 Andreas Huber 的解释是正确的。您可以通过从显式实现调用另一个私有事件来解决此问题。这样,您将从类似字段的事件功能中获得所有自动功能(线程安全等)。示例:
sealed class Foo : IFoo { event EventHandler privateEventFieldLike; event EventHandler IFoo.Event { add { privateEventFieldLike += value; } remove { privateEventFieldLike -= value; } } }
标签: c# events interface explicit-implementation