2012-01-30 17 views
5

,我想看到的事件屬性。檢查的產生磁場的屬性後面給出下面的類定義</p> <pre><code>public class MyClass { [System.ComponentModel.Browsable(true)] [field:NonSerialized] public event EventHandler MyEvent; } </code></pre> <p>別的地方在我的代碼字段般的事件

var attributes = typeof(MyClass) 
        .GetEvents() 
        .SelectMany(n => n.GetCustomAttributes(true)); 

但是我在該屬性集合中只看到BrowsableAttribute

如何獲取field:NonSerialized屬性信息?

+1

'GetFields'具有適當的'BindingFlags'會爲您提供所有的字段,但是要進一步瞭解,我們需要知道您*開始*的哪些信息,以及您想要*獲得的信息。你是否希望能夠說:「對於每場類似事件,請告訴我*該事件背後的領域屬性*」?或者,「是否有任何」NonSerialized「字段,包括生成的字段?」足夠?要麼...? – AakashM 2012-01-30 15:16:21

回答

2

field:語法表示該屬性附加到由編譯器生成的字段(以支持該字段)。你永遠不會知道這個字段的名稱,因爲它是一個實現細節,它不是EventInfo的一部分(因爲事件不需要專門支持字段 - 它可以被代理,或者是一個EventHandlerList等) 。

如果您需要該級別的信息,則可能需要手動實施事件(而不是像所描述的「字段式事件」),但是;在現實中,你很少需要知道這一點。這個信息是確實只需要BinaryFormatter等,說「脫手」。

另一種方法是使用GetFields(),但是再次;不存在將字段映射到事件的可靠方法。

相關問題

 相關問題