我有一个用户控件来处理fileupload.我已经定义了一个委托如下
public delegate void FileUploadSuccess<T>(T value,FileUploadType F)
Run Code Online (Sandbox Code Playgroud)
value可以是字符串也可以是字节数组.FileUploadType是一个枚举,它告诉上传了哪种类型的文件.
现在我在usercontrol中声明了一个事件来提高它.
public event FileUploadSuccess<string> successString; //In case I want a file name
public event FileUploadSuccess<Byte[]> successStringImage; // In case I want a byte[] of uploaded image
Run Code Online (Sandbox Code Playgroud)
我想要的是一般事件
public event FileUploadSuccess<T> successString.
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 16
除了作为通用类型的一部分(即
class Foo<T> { public event SomeEventType<T> SomeEventName; }
Run Code Online (Sandbox Code Playgroud)
)没有泛型属性,字段,事件,索引器或运算符(只有泛型类型和泛型方法).这里的包含类型可以是通用的吗?
在外界看来,一个事件在很多方面看起来都像是课堂的一个领域。正如您不能使用开放泛型类型来声明字段一样,您也不能使用开放泛型类型来声明事件。
如果您可以让类型保持打开状态,那么编译器将不得不在事件处理程序中编译,为您的泛型参数的每个可能类型添加和删除代码T。封闭的泛型类型无法进行 JIT 编译,因为您的事件本身并不是一种类型,而是封闭类型的一部分。
除非您在封闭类中定义类型参数,否则这是不可能的。例如:
public delegate void FileUploadSuccess<T>(T value, FileUploadType F)
public class FileUploader<T>
{
public event FileUploadSuccess<T> FileUploaded;
}
Run Code Online (Sandbox Code Playgroud)
但这只会将您的问题转移到另一个位置,因为现在您必须声明FileUploader该类的两个实例:
FileUploader<string> stringUploader = new FileUploader<string>();
FileUploader<byte[]> stringUploader = new FileUploader<byte[]>();
Run Code Online (Sandbox Code Playgroud)
这可能不是您想要的。
| 归档时间: |
|
| 查看次数: |
12449 次 |
| 最近记录: |