2009-02-27 5 views

答えて

4

一つのオプションはジェネリック医薬品です:

public static ConvertFile<T>() where T : IFileConvert 
{ 
    Type type = typeof(T); // if you need it 
} 

として呼び出す:あなたはコンパイル時にそれを強制したい場合は、ジェネリック医薬品が唯一の方法である

ConvertFile<SomeFileType>(); 
+0

をしなければならないし、あなたが前もってTがわからない場合、あなたはMethodInfo.MakeGenericMethodがそれを呼び出すために使用することができますしたくなかったクラスのインスタンスを作成する必要 –

+0

これはうまく仕事をします。 – cjk

0

は、あなただけ行うことはできません。

public static ConvertFile(IFileConvert fileType) 
+0

これはトリッキー、しかし...私は – cjk

3

いや、それは不可能です。ただし、次のようにすることができます。

public static void ConvertFile<T>() where T : IFileConvert { 
    Type fileType = typeof(T); 
} 

1

public static ConvertFile<T>(T fileType) 
    where T : IFileType 

実行時に確認するには、次の操作を行います。

Debug.Assert(typeof(IFileType).IsAssignableFrom(fileType)); 
0

マークの答えをエキスパンドする。彼は正しかった、ジェネリックスなしでコンパイル時にこれを強制する方法はない。ジェネリックを使用できない、または使用したくない場合は、次のようにランタイムチェックを追加できます。

public static void ConvertFile(Type type) { 
    if (!typeof(IFileType).IsAssignableFrom(type)) { 
    throw new ArgumentException("type"); 
    } 
    ... 
} 
関連する問題