Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » Reflection BUG??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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
        }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.02.2006, 09:16 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
ich sehe in MainClass nur öffentliche Methoden
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: