我有一个基本的通用usercontrol定义为:
public partial class BaseUserControl<T> : UserControl where T : class
{
public event ItemsSelectedEventHandler ItemsSelected;
}
和一位代表:
public class ItemsSelectedEventArgs<T> : EventArgs
{
public IEnumerable<T> Items { get; private set; }
internal ItemsSelectedEventArgs(IEnumerable<T> items)
{
this.Items = items;
}
}
public delegate void ItemsSelectedEventHandler(object sender, ItemsSelectedEventArgs<T> e);
此用户控件的一种方法是一次加载多个记录并将其作为IEnumerable<T>
返回。然后,继承控件将是具体类型,它们将把事件提升到订阅者(即表单)。
但是,上面没有编译,我收到以下错误:
找不到类型或命名空间名称'T'(您是否缺少using指令或程序集引用?)
是否有可能以其他方式实现我的需要?
答案 0 :(得分:5)
当然可以。错误发生在最后一行 - 您尚未将“T”声明为通用。而不是:
public delegate void ItemsSelectedEventHandler(object sender, ItemsSelectedEventArgs<T> e);
应该是:
public delegate void ItemsSelectedEventHandler<T>(object sender, ItemsSelectedEventArgs<T> e);
答案 1 :(得分:2)
public delegate void ItemsSelectedEventHandler<T>(object sender, ItemsSelectedEventArgs<T> e);
此外,您可以使用预定义的通用EventHandler<T>
,如下所示:
public event EventHandler<ItemsSelectedEventArgs<SomeType>> SomeEvent;