Rompiendo las Reglas: : invocando métodos privado desde otra clase en C#
Las reglas de la programación orientada al objeto (OOP) dicen que no se puede llamar a un método privado de una clase.
De modo que si se tiene la siguiente clase:
class MiClase
{
private void MetodoPrivado()
{
System.Console.WriteLine("método privado invocado");
}
}
No es posible llamar al método MetodoPrivado desde otra clase, incluso desde una clase derivada.
Rompiendo las reglas
Pero en C# usando Reflection es posible saltar esta restricción, y llamar un método privado.
El siguiente código muestra cómo
using System;
using System.Reflection;
public class PrivateCaller
{static void Main()
{PrivateClass a = new PrivateClass();
BindingFlags eFlags = BindingFlags.Instance
| BindingFlags.Public
| BindingFlags.NonPublic;
MethodInfo m;
try
{m = t.GetMethod("PrivateMethod", eFlags);
if (m != null)
{m.Invoke(objInstance, aobjParams);
}
}
catch
{
throw;
}
}
}
Por supuesto esto se puede evitar aplicando el atributo ReflectionPermission.
¿Para qué podría usarse esto?
Un uso interesante es cuando quieres hacer testing de clases, usando NUnit, por ejemplo, en ese caso puedes usar esto para probar métodos privados de una clase.
Otro uso es para invocar métodos de una clase a la cual no tienes acceso para modificarla.