【发布时间】:2019-08-04 15:42:02
【问题描述】:
class MyClass<T> {
public event T MyEvent;
}
错误:CS0066 'MyClass<T>.MyEvent': event must be of a delegate type。
好的……C# ≥7.3 allows Delegate as base class constraint。让我们使用它:
class MyClass<T> where T: Delegate {
public event T MyEvent;
}
错误:CS0066 'MyClass<T>.MyEvent': event must be of a delegate type。
WTH???
【问题讨论】:
-
看起来像这样的副本:stackoverflow.com/questions/3126886/…
-
@felix-b,不是真的。在那个问题 IIUC 中,事件具有预定的形状(即:两个参数,第二个参数类型为
FileUploadType),只有第一个参数是T(我不明白作者是否希望第一个参数接受任何东西或只是为了具有对应于外部泛型类参数的类型,但无论如何这不是我的情况)。在我的情况下,我希望事件形状本身依赖于外部通用类参数:即在我的情况下T可以是 0 参数委托、2 参数委托等。 -
你是对的。有趣的是,C# 规范中的 Events section 没有指定任何关于事件委托类型的特殊内容。可能很难或不可能生成调用此类事件的 IL,可能是因为不知道委托是无效还是返回值。然而,我希望这种限制会被记录在案。
标签: c# generics events delegates