Biorąc pod uwagę tę klasę
class Foo
{
// Want to find _bar with reflection
[SomeAttribute]
private string _bar;
public string BigBar
{
get { return this._bar; }
}
}
Chcę znaleźć prywatny element _bar, który oznaczę atrybutem. Czy to jest możliwe?
Zrobiłem to z właściwościami, w których szukałem atrybutu, ale nigdy nie jest to pole prywatnego członka.
Jakie flagi wiążące muszę ustawić, aby uzyskać pola prywatne?
c#
.net
reflection
.net-attributes
David Basarab
źródło
źródło
Odpowiedzi:
Użyj
BindingFlags.NonPublic
iBindingFlags.Instance
flagiźródło
Możesz to zrobić tak jak w przypadku właściwości:
źródło
Uzyskaj wartość zmiennej prywatnej za pomocą Reflection:
Ustaw wartość zmiennej prywatnej za pomocą Reflection:
Gdzie objectForFooClass jest instancją niepustą dla typu klasy Foo.
źródło
GetInstanceField(typeof(YourClass), instance, "someString") as string
Jak uzyskać wartość pola prywatnego w C #?Jedną z rzeczy, o których musisz wiedzieć, zastanawiając się nad prywatnymi członkami, jest to, że jeśli twoja aplikacja działa na średnim poziomie zaufania (jak na przykład, gdy pracujesz na współużytkowanym środowisku hostingowym), nie znajdzie ich - Opcja BindingFlags.NonPublic zostanie po prostu zignorowana.
źródło
źródło
Ładna składnia z metodą rozszerzenia
Możesz uzyskać dostęp do dowolnego prywatnego pola dowolnego typu za pomocą takiego kodu:
W tym celu musisz zdefiniować metodę rozszerzenia, która wykona pracę za Ciebie:
źródło
Używam tej metody osobiście
źródło
Oto kilka metod rozszerzenia do prostego pobierania i ustawiania prywatnych pól i właściwości (właściwości z ustawiaczem):
przykład użycia:
Kod:
źródło
Tak, jednak musisz ustawić flagi Binding, aby wyszukiwały pola prywatne (jeśli szukasz członka spoza instancji klasy).
Potrzebna flaga wiązania to: System.Reflection.BindingFlags.NonPublic
źródło
Natknąłem się na to podczas wyszukiwania tego w google, więc zdaję sobie sprawę, że wpadam na stary post. Jednak GetCustomAttributes wymaga dwóch parametrów.
Drugi parametr określa, czy chcesz przeszukiwać hierarchię dziedziczenia
źródło