是否可以拥有通用代表?

Iva*_*ono 0 c# generics winforms

我有一个基本的通用usercontrol定义为:

public partial class BaseUserControl<T> : UserControl where T : class
{
    public event ItemsSelectedEventHandler ItemsSelected;
}
Run Code Online (Sandbox Code Playgroud)

代表:

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);
Run Code Online (Sandbox Code Playgroud)

此用户控件的一种方法是一次加载多个记录并将其作为返回IEnumerable<T>.然后,继承控件将是具体类型,并且它们将依次将事件提升给订阅者(即表单).

但是,上面没有编译,我得到以下错误:

找不到类型或命名空间名称"T"(您是否缺少using指令或程序集引用?)

有可能以其他方式实现我需要的东西吗?

vel*_*koz 5

当然可以.错误发生在最后一行 - 您尚未将"T"声明为通用.代替:

public delegate void ItemsSelectedEventHandler(object sender, ItemsSelectedEventArgs<T> e);
Run Code Online (Sandbox Code Playgroud)

它应该是:

public delegate void ItemsSelectedEventHandler<T>(object sender, ItemsSelectedEventArgs<T> e);
Run Code Online (Sandbox Code Playgroud)