2012-01-30 9 views
5

Biorąc pod uwagę definicję następujące klasyKontrola atrybuty na polu generowanym za pomocą pola podobnego zdarzenia

public class MyClass 
{ 
    [System.ComponentModel.Browsable(true)] 
    [field:NonSerialized] 
    public event EventHandler MyEvent; 
} 

gdzieś indziej w moim kodu, chciałbym zobaczyć atrybuty dotyczące imprezy. W tej kolekcji atrybutów widzę tylko BrowsableAttribute.

Jak uzyskać informacje o atrybucie field:NonSerialized?

+1

'GetFields' z odpowiednią opcją' BindingFlags' zawiera wszystkie pola, ale aby przejść dalej, musimy wiedzieć, jakie informacje * rozpoczynasz * od, i jakie informacje próbujesz * dostać do *. Czy chcesz móc powiedzieć: "dla każdego wydarzenia przypominającego pole, powiedz mi, jakie atrybuty na polu za * to wydarzenie *"? A może odpowiedź brzmiałaby: "czy są jakieś pola" NiesSerialized ", w tym wygenerowane?" być wystarczającym? Lub...? – AakashM

Odpowiedz

2

Składnia field: oznacza, że ​​atrybut jest dołączony do pola generowanego przez kompilator (w celu obsługi tego pola). Nigdy nie poznasz nazwy tego pola, ponieważ jest to szczegół implementacji i nie jest częścią EventInfo (ponieważ zdarzenia nie muszą być poparte konkretnie przez pole - może to być proxy, lub EventHandlerList itp.) .

Jeśli potrzebujesz tego poziomu informacji, możesz chcieć zaimplementować zdarzenie ręcznie (zamiast "zdarzenia przypominającego pole", jak pokazano), ale; w rzeczywistości rzadko trzeba o tym wiedzieć. Ta informacja to naprawdę potrzebna przez BinaryFormatter i innych, aby powiedzieć "hands off".

Innym podejściem byłoby użycie GetFields(), ale znowu; nie istnieje niezawodny sposób mapowania pól na zdarzenia.

Powiązane problemy