如何指定传递特定接口的Type?

时间:2009-02-27 15:33:14

标签: c# .net .net-2.0

我有一个方法,我想要一个Type,但是某个接口的参数。

E.g:

public static ConvertFile(Type fileType)

我可以指定fileType继承IFileConvert。

这可能吗?

5 个答案:

答案 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");
  }
  ...
}