我有一个方法,我想要一个Type,但是某个接口的参数。
E.g:
public static ConvertFile(Type fileType)
我可以指定fileType继承IFileConvert。
这可能吗?
答案 0 :(得分:4)
一种选择是泛型:
public static ConvertFile<T>() where T : IFileConvert
{
Type type = typeof(T); // if you need it
}
并致电:
ConvertFile<SomeFileType>();
答案 1 :(得分:3)
不,这是不可能的。但是你可以这样做:
public static void ConvertFile<T>() where T : IFileConvert {
Type fileType = typeof(T);
}
代替。
答案 2 :(得分:1)
如果你想在编译时强制执行,那么泛型是唯一的方法:
public static ConvertFile<T>(T fileType)
where T : IFileType
要在运行时检查,您可以执行以下操作:
Debug.Assert(typeof(IFileType).IsAssignableFrom(fileType));
答案 3 :(得分:0)
你不能这样做:
public static ConvertFile(IFileConvert fileType)
答案 4 :(得分:0)
扩展Marc的答案。他是正确的,没有泛型,没有办法在编译时强制执行此操作。如果您不能或不想使用泛型,可以按如下方式添加运行时检查。
public static void ConvertFile(Type type) {
if ( !typeof(IFileType).IsAssignableFrom(type)) {
throw new ArgumentException("type");
}
...
}