問題是,Type.GetInterfaces()返回一個類實現的所有接口,這包括由繼承的基類定義/實現的所有接口。當我試圖找出一個類在本地引用/實現的接口(因此排除了在基類中引用/定義的任何接口)時,我遇到了問題。如何使用反射來確定本地類是否實現接口?
我想要做類似type.GetProperties()可以採取的BindingFlags的東西,所以下面的代碼會得到那些類型內聲明的所有公共/私有財產被引用(和所有屬性中聲明基類不包括在內)。
type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly)
我試過以下,但它失敗,因爲「.DeclaringType」始終爲空。
foreach (var implementedInterface in type.GetInterfaces())
{
if (implementedInterface.DeclaringType == type)
{
locallyDefinedInterfaces.Add(implementedInterface);
}
}
你爲什麼要這樣做? – DJClayworth 2011-02-16 14:38:16
@DJClayworth:你是否真的這麼說:「你爲什麼要這樣做,我可能會以另一種方式提出建議?」。它將幫助一些新的員工從頭開始學習.NET和OO,這樣他們就可以安全地對類進行修改,因爲知道如果類定義不會改變,那麼他們就可以從這個角度來看。我同意,斷言/測試通常是矯枉過正的,但在這個例子中,已經決定這個級別的測試至少在短期內是有益的。在大多數情況下,這些測試只需要很短的時間就可以編寫 – 2011-02-16 14:58:29