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 ;-)