为什么会出现编译错误?
public class EventAggregationHelper {
public static SubscriptionToken SubscribeToEvent<T>( IEventAggregator eventAggregator ) where T : EventBase {
T evt = eventAggregator.GetEvent<T>();
//T evt = eventAggregator.GetEvent<T>();
return null;
}
}
错误是:
严重级代码描述项目文件行抑制状态 错误CS0310'T'必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法'IEventAggregator.GetEvent()'EntitySetGridTWPF D:\ DEVELOPER.NET \ Comercial \中将其用作参数'TEventType' EntityBookCommon \ EntitySetGridTWPF \ EventAggregation \ EventAggregationHelper.cs 9 Active
就行:
T evt = eventAggregator.GetEvent<T>();
我之前使用过这种方法调用其他泛型方法并且已经工作过了。 GetEvent有什么特别之处?
提前致谢。
答案 0 :(得分:2)
IEventAggregator.GetEvent
有一个new()
约束,这意味着您的订阅还需要添加new()
约束,并且还需要由您的实现类T
来完成,必须有一个公共无参数(默认)构造函数(并且不能是抽象的。)
public static SubscriptionToken SubscribeToEvent<T>
(IEventAggregator eventAggregator) where T : EventBase, new() {