2009-06-08 5 views

Répondre

5

Here est un exemple de le faire dans .NET

using System; 
using System.Reflection; 
using System.Collections.Generic; 

public class MyClass 
{ 
    public static void Main() 
    { 
     try 
     { 
      Console.WriteLine("TestReflect started."); 
      TestReflect test = new TestReflect(); 
      Console.WriteLine("TestReflect ended."); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 

     ConsoleKeyInfo cki; 
     do 
     { 
      Console.WriteLine("Press the 'Q' key to exit."); 
      cki = Console.ReadKey(true); 
     } while (cki.Key != ConsoleKey.Q); 
    } 
} 

public class TestReflect 
{ 
    public TestReflect() 
    { 
     this.GetType().GetMethod("PublicMethod").Invoke(this, null); 
     this.GetType().GetMethod("PrivateMethod", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(this, null); 
    } 

    public void PublicMethod() 
    { 
     Console.WriteLine("PublicMethod called"); 
    } 

    private void PrivateMethod() 
    { 
     Console.WriteLine("FTW!one1"); 
    } 
} 
+0

Le lien est cassé. Cela aurait été bien si vous aviez copié les éléments utiles du site avant qu'ils ne soient supprimés, maintenant cette réponse acceptée n'est pas utile. – NightOwl888

+1

@ NightOwl888, réparé pour vous. – Yishai

2

Il est tout à fait possible dans .NET d'avoir accès à quoi que ce soit de réflexion à l'aide privée .

accès à obtenir par exemple une méthode d'instance privée appelée Foo sur la barre de classe ressemblerait à ceci:

typeof(Bar).GetMethod("Foo",BindingFlags.NonPublic | BindingFlags.Instance); 

il ne nécessite cependant que le code en utilisant la réflexion est entièrement confiance.

(Les exigences de sécurité seront différentes pour V4)

Questions connexes