私は、タイプであるが特定のインターフェースのパラメーターを持つメソッドを持っています。私はのfileTypeを指定することができ特定のインターフェイスであるTypeを渡す方法を指定しますか?
例えば:
public static ConvertFile(Type fileType)
はIFileConvertを継承します。
これは可能ですか?
私は、タイプであるが特定のインターフェースのパラメーターを持つメソッドを持っています。私はのfileTypeを指定することができ特定のインターフェイスであるTypeを渡す方法を指定しますか?
例えば:
public static ConvertFile(Type fileType)
はIFileConvertを継承します。
これは可能ですか?
一つのオプションはジェネリック医薬品です:
public static ConvertFile<T>() where T : IFileConvert
{
Type type = typeof(T); // if you need it
}
として呼び出す:あなたはコンパイル時にそれを強制したい場合は、ジェネリック医薬品が唯一の方法である
ConvertFile<SomeFileType>();
いや、それは不可能です。ただし、次のようにすることができます。
public static void ConvertFile<T>() where T : IFileConvert {
Type fileType = typeof(T);
}
:
public static ConvertFile<T>(T fileType)
where T : IFileType
実行時に確認するには、次の操作を行います。
Debug.Assert(typeof(IFileType).IsAssignableFrom(fileType));
マークの答えをエキスパンドする。彼は正しかった、ジェネリックスなしでコンパイル時にこれを強制する方法はない。ジェネリックを使用できない、または使用したくない場合は、次のようにランタイムチェックを追加できます。
public static void ConvertFile(Type type) {
if (!typeof(IFileType).IsAssignableFrom(type)) {
throw new ArgumentException("type");
}
...
}
をしなければならないし、あなたが前もってTがわからない場合、あなたはMethodInfo.MakeGenericMethodがそれを呼び出すために使用することができますしたくなかったクラスのインスタンスを作成する必要 –
これはうまく仕事をします。 – cjk