000
13.02.2006, 18:23 Uhr
rizi
|
hi,ich habe eine frage, habe mich jetzt kurz mit reflection befasst, d.h ich rufe eine Methode über Reflection zur laufzeit auf, diese methode(methoden) sind in meinem fall einmal private static und einmal (also instanc-methode)private. Ich benutze "reflection" in einer TestClasse und siehe da ich kann eine private methode aufrufen obwohl ich diese methode nicht innerhalb der klasse aufrufe sondern in einer anderen klasse. wieso funktioniert das?? gerade private sollte doch dafür sorgen das man die methode(n) nur innerhalb der klasse aufrufen kann in der sie definiert ist, somit kann man doch jegliches "sicherheitskonzept" unterlaufen. Ich hoffe ihr versteht was ich meine!!
code:
C++: |
//TestClasse using System; using System.Collections.Generic; using System.Text;
namespace MyProject {
public class HeadClass {//TestClasse
private void Test() { Console.WriteLine("TestHeadClass"); }
private static int Test2(int a) { return a * 3; } } }
namespace MyProject {
public class MainClass {
public static void Main(string[] args) { new MainClass().testInstanceReflection(); }
public void testInstanceReflection() { Type type = Type.GetType("MyProject.HeadClass");//Klasse wo sich Methode befindet MethodInfo minfo = type.GetMethod("Test", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); Object theObject = Activator.CreateInstance(type);//Instanz der Klasse erstellen Object returnValue = minfo.Invoke(theObject, null);//Methode aufrufen }
public void testStaticReflection() { Type type = Type.GetType("MyProject.HeadClass"); Type[] types = new Type[1]; types[0] = Type.GetType("System.Int32");//Typ des Parameters MethodInfo minfo = type.GetMethod("Test2", BindingFlags.NonPublic | BindingFlags.Static, null, types, null); //Name der Methode,Zugriffsspezifikation,null,types,null Object[] parameters = new Object[1]; parameters[0] = 5; //Parameter für Methode Object returnValue = minfo.Invoke(type, parameters);//Rückgabewert Console.WriteLine(returnValue);//Ausgabe }
|
|