This article shows how one of the basic OOP principles - encapsulation - can be violated using reflection.
Let's assume that we have a simple class with a private field called "someHiddenValue".
We want to modify that field from outside the class. This can be done extremely easy through Reflection. First of all we need to get the Type of the ClassThatHidesSomething and get some information about the someHiddenValue field.
BindingFlags.NonPublic specifies that we want to search in all fields; by default it searches only the public fields - actually here is the trick that violates encapsulation.
BindingFlags.Instance specified that we want to search in instance fields also; by default it searches only in static ones.
Now that we have the FieldInfo of that specific field we can do whatever we want with it. Let's display its value. But first, because the field is an instance field we need an instance of ClassThatHidesSomething.
Using the same instance c we can set the private field's value.
Below you can see the entire code (it is a console application):