C# 如何指定传递属于特定接口的类型?

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

我有一个方法,其中我希望有一个类型的参数,但属于某个接口

例如:

我可以在其中指定文件类型继承IFileConvert

这可能吗?

你就不能这样做:

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