As the saying goes, private fields and properties of a class are not available outside the class. But are they really private? Well, they are not; once they are in memory, anyone can tap in to them.
Let’s write some code in c#:
void Main ()
{
//create an instance and dump
var demo = new PrivateDemo (). Dump ();
FieldInfo [] privateFieldInfos = typeof ( PrivateDemo )
. GetFields ( BindingFlags . NonPublic | BindingFlags . Instance );
//set new value and dump
foreach ( var fieldInfo in privateFieldInfos )
{
fieldInfo . SetValue ( demo , "I am no longer private..." );
fieldInfo . GetValue ( demo ). Dump ( fieldInfo . Name );
}
}
public class PrivateDemo
{
public string PublicProperty { get ; set ; }
private string PrivateProperty { get ; set ; }
private string privateField ;
public PrivateDemo ()
{
PublicProperty = "I am public..." ;
PrivateProperty = "I am private..." ;
privateField = "I am also Private..." ;
}
}
And output from LinQPad :