Immaginiamo di avere una classe definita come segue in un nostro assembly:
internal class Executer
{
private void Print(string name)
{
Console.WriteLine("Hello " + name);
}
}
Siamo davvero sicuri che nessuno al difuori dei metodi della nostra classe possano chiamare Print? La risposta è ovviamente no. Basta usare reflection e diventa possibile chiamare Print anche da un'altro assembly:
Type type = Type.GetType("Demo.Validator.Executer, Demo.Validator", false);
MethodInfo method = type.GetMethod("Print", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
method.Invoke(Activator.CreateInstance(type, true), new object[] { "World" });
Questo esempio basta ed avanza per convincerci che anche i metodi privato richiedono un controllo accurato dei parameri di input ;-)