2010-10-29 46 views
0

考慮以下情況:如何在引用接口時獲取實際的屬性名稱?

Public Interface IHasDateUpdated 
    Property DateUpdated As DateTime 
End Interface 

Public Class MyClass 
    Implements IHasDateUpdated 

    Public Property MyDateUpdated As DateTime Implements IHasDateUpdated.DateUpdated 
End Class 

現在,假設我被引用的MyClass的實例作爲IHasDateUpdated;我將如何確定通過反射實現接口屬性的屬性的實際名稱?

例如:

Dim x As IHasDateUpdated = New MyClass() 
' How do I derive "MyDateUpdated" from "x" using x.DateUpdated? 

回答

1

對不起弗洛爾C#的答案,但你應該能夠把這種我:)發售者

InterfaceMapping im = y.GetInterfaceMap(typeof(IHasDateUpdated)); 
     foreach (MethodInfo info in im.TargetMethods) 
     { 
      if (info.IsPrivate) 
       MessageBox.Show(info.Name + " is private"); 
     } 
     MessageBox.Show(y.FullName); 
+0

假設有比在一個單一的屬性更接口,有沒有一種方法我可以專門針對,而不訴諸迭代? – DanP 2010-10-29 13:21:07

+0

我想你可以使用linq來選擇你感興趣的,但你需要獲得索引以獲得映射的索引。也許這個網站會略見一斑(它在VB中)http://msdn.microsoft.com/en-us/library/system.type.getinterfacemap(VS.95).aspx – Kell 2010-10-29 13:42:11

+0

方法這是一個擴展的理想場所方法..應該清理我的客戶端代碼很多..感謝把我放在正確的軌道上。 – DanP 2010-10-29 13:54:57