我有一個方法,我想有一個參數是一個類型,但某個接口。如何指定傳遞具有特定接口的類型?
例如爲:
public static ConvertFile(Type fileType)
在那裏我可以指定的fileType繼承IFileConvert。
這可能嗎?
我有一個方法,我想有一個參數是一個類型,但某個接口。如何指定傳遞具有特定接口的類型?
例如爲:
public static ConvertFile(Type fileType)
在那裏我可以指定的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));
擴大Marc的答案。他是正確的,沒有泛型,在編譯時沒有辦法強制執行。如果你不能或不想使用泛型,你可以添加一個運行時檢查如下。
public static void ConvertFile(Type type) {
if (!typeof(IFileType).IsAssignableFrom(type)) {
throw new ArgumentException("type");
}
...
}
如果你不知道的T時間提前,可以使用MethodInfo.MakeGenericMethod調用它的類...棘手,但 – 2009-02-27 15:43:21