C# 如何指定传递属于特定接口的类型?
我有一个方法,其中我希望有一个类型的参数,但属于某个接口 例如: 我可以在其中指定文件类型继承IFileConvert 这可能吗?你就不能这样做:C# 如何指定传递属于特定接口的类型?,c#,.net,.net-2.0,C#,.net,.net 2.0,我有一个方法,其中我希望有一个类型的参数,但属于某个接口 例如: 我可以在其中指定文件类型继承IFileConvert 这可能吗?你就不能这样做: public static ConvertFile(IFileConvert fileType) 不,这是不可能的。但是,您可以: public static void ConvertFile<T>() where T : IFileConvert { Type fileType = typeof(T); } public st
public static ConvertFile(IFileConvert fileType)
不,这是不可能的。但是,您可以:
public static void ConvertFile<T>() where T : IFileConvert {
Type fileType = typeof(T);
}
public static void ConvertFile(),其中T:IFileConvert{
类型fileType=typeof(T);
}
相反。一个选项是泛型:
public static ConvertFile<T>() where T : IFileConvert
{
Type type = typeof(T); // if you need it
}
public static ConvertFile(),其中T:IFileConvert
{
Type Type=typeof(T);//如果需要
}
并称为:
ConvertFile<SomeFileType>();
ConvertFile();
如果要在编译时强制执行,泛型是唯一的方法:
public static ConvertFile<T>(T fileType)
where T : IFileType
扩展马克的答案。他是正确的,如果没有泛型,就无法在编译时强制执行。如果不能或不想使用泛型,可以按如下方式添加运行时检查
public static void ConvertFile(Type type) {
if ( !typeof(IFileType).IsAssignableFrom(type)) {
throw new ArgumentException("type");
}
...
}
这涉及到实例化我不想执行的类,如果您事先不知道t,可以使用MethodInfo.MakeGenericMethod调用它。。。但更棘手的是
Debug.Assert(typeof(IFileType).IsAssignableFrom(fileType));
public static void ConvertFile(Type type) {
if ( !typeof(IFileType).IsAssignableFrom(type)) {
throw new ArgumentException("type");
}
...
}