2015-11-09 41 views
0

我最近阅读了反思的全部概念,我知道使用C#的这种工具的主要思想,但我仍然无法理解其中的一个方面。我认为,封装没有任何意义,如果任何人有这种通过反射来执行私人方法的能力,你是否介意让我知道这种误解?打破反思的封装规则

调用私有方法使用反射

 string methodName = ""; 

     Type aclass = typeof (AClass); 
     object obj = Activator.CreateInstance(aclass); 

     Type t = typeof (AClass); 
     MethodInfo [] mi = t.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance); 
     methodName = mi[0].Name; 
     MethodInfo PrivateMethod = typeof (AClass).GetMethod(methodName,BindingFlags.NonPublic | BindingFlags.Instance); 

     Console.WriteLine(PrivateMethod.Invoke(obj,null)); 
     Console.ReadLine(); 

ACLASS类有一个私人方法

internal class AClass 
    { 
     private bool First() 
     { 
      return true; 
     } 
    } 

输出:

+2

你可能想看看[这个答案](http://stackoverflow.com/questions/3300680/does-reflection-breaks-the-idea-of-private-methods-because-private-methods-能够) – therak

回答

0

访问私有方法应该在单元测试的环境中,尤其是在处理遗留代码时。