2012-05-30 155 views

回答

7

編輯:現在的問題已改爲參考擴展方法(這可能是也可能不是OP的意圖) - 不,你不能告訴一個類型是否是擴展方法的目標,除非它是一個靜態類(在這種情況下,它不能這樣使用),除非你知道所有相關的潛在裝配。

擴展方法是在靜態非通用頂級類型只是一個靜態方法,裝飾有一個屬性。你有效地問這種方法是否存在。你可以迭代你關心的所有程序集中的所有方法,試圖找到一個針對該類型的擴展方法,但僅此而已。


原來的答覆,當問題沒有提到的擴展方法

如果你知道所有在它可能擴展的組件,你可以使用Assembly.GetTypesType.IsSubclassOf檢查他們每個人。

如果類是未密封並且不包含內部抽象成員(即,它可以加長),那麼就可以不告訴其他一些,卸載組件是否含有一個子類,沒有。每個班級「知道」其父母,但不瞭解其子女。

+0

@Downvoter:關心評論? –

+0

謝謝你雙重答案:-)我從兩方面瞭解到。 –

2

如果一個類是受保護的,或公開,幾乎沒有辦法來確定它是否延長或不。

如果要在裝配體內或裝配過程中(所有裝入的裝配體)確定,可以使用Type.IsSubclassOfType.IsAssignableForm進行檢查。

如果你想確定在編譯時(無需實際執行)的解決方案中,只是使構造私有,或將類標記爲密封,編譯解決方案,並檢查所有的相關的錯誤。完成後,恢復更改。

1

無法知道某個類是否使用擴展方法進行了擴展。將擴展方法看作靜態過程,這些靜態過程在不同的項目中只會有微弱差別。

擴展方法不產生任何新的類型,也可以永不覆蓋真正的成員方法(因此,直到你開始直接打電話給他們,他們不能以任何方式改變對象的行爲)。因此,您可能不需要需要來檢測它們的存在。

可以確定某個特定方法是擴展方法還是真正的成員方法。也可以使用反射在特定的加載程序集中列出所有擴展方法。這是解釋here

相關問題