Roslyn的IEventSymbol
可以方便地访问事件声明的所有相关部分。虽然AddMethod
和RemoveMethod
很容易理解,但我不确定RaiseMethod
应该是什么。文档也有点解析。
C#规范仅提及添加和删除事件的访问者。这可能是其他CLR语言允许指定的内容吗?
答案 0 :(得分:4)
我在Roslyn来源中找到了this:
internal abstract partial class EventSymbol : Symbol, IEventSymbol
{
...
IMethodSymbol IEventSymbol.RaiseMethod
{
get
{
// C# doesn't have raise methods for events.
return null;
}
}
...
}
看起来它实际上适用于Visual Basic:
事件就像是宣布发生重要事件的消息。广播该消息的行为称为提升该事件。在Visual Basic中,使用RaiseEvent语句引发事件,如以下示例所示:
RaiseEvent AnEvent(EventNumber)
必须在声明它们的类,模块或结构的范围内引发事件。例如,派生类不能引发从基类继承的事件。
查看Roslyn source for VB,有一个很多对该RaiseMethod
属性的更多引用。
VB规范在第9.4.1节自定义事件中明确提到RaiseEvent
访问者:
自定义事件的声明方式与指定事件的事件相同 声明委托类型,但关键字
Custom
除外 必须位于Event
关键字之前。自定义事件声明包含 三个声明:AddHandler
声明,RemoveHandler
声明和RaiseEvent
声明。没有一个声明可以 有任何修饰符,虽然它们可以有属性。例如:Class Test Private Handlers As EventHandler Public Custom Event TestEvent As EventHandler AddHandler(value As EventHandler) Handlers = CType([Delegate].Combine(Handlers, value), _ EventHandler) End AddHandler RemoveHandler(value as EventHandler) Handlers = CType([Delegate].Remove(Handlers, value), _ EventHandler) End RemoveHandler RaiseEvent(sender As Object, e As EventArgs) Dim TempHandlers As EventHandler = Handlers If TempHandlers IsNot Nothing Then TempHandlers(sender, e) End If End RaiseEvent End Event End Class