Reflection with Private Members

http://www.codingday.com/reflection-with-private-members/

By using reflection we can call any function including the private and protected ones. This includes private static methods, constructor methods, normal methods. What we need to do is to get the method by the BindingFlags.Nonpublic flag and then we just use it like a reflected type.

 

Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
 
namespace ReflectPrivateMembers
{
    
class Program
    {
        
static void Main(string[] args)
        {
            ConstructorInfo ci 
= typeof(Hello).GetConstructor(BindingFlags.NonPublic| BindingFlags.Instance ,null,System.Type.EmptyTypes,null);
            
object helloObject = ci.Invoke(System.Type.EmptyTypes);
            MethodInfo[] helloObjectMethods 
= helloObject.GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.DeclaredOnly| BindingFlags.Instance );
 
            
foreach (MethodInfo mi in helloObjectMethods)
            {
                mi.Invoke(helloObject, System.Type.EmptyTypes);
            }
            Console.ReadLine();
        }
    }
    
public class Hello
    {
        
private Hello()
        {
            Console.WriteLine(
"Private Constructor");
        }
        
public void HelloPub()
        {
            Console.WriteLine(
"Public Hello");
        }
        
private void HelloPriv()
        {
            Console.WriteLine(
"Private Hello");
        }
    }
}

posted on 2009-09-07 20:52  smwikipedia  阅读(206)  评论(0编辑  收藏  举报

导航