看看setAccessible - Java中的一种方式,让您通过反射调用私有方法。为什么.NET还没有实现这样的功能呢?
答案 0 :(得分:5)
Here是在.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");
}
}
答案 1 :(得分:4)
您可以使用反射来调用私有方法,尽管它不像调用公共方法那样直接。我们之前已经完成了单元测试,并使用了以下帖子作为操作方法参考:
http://www.emadibrahim.com/2008/07/09/unit-test-private-methods-in-visual-studio/
http://johnhann.blogspot.com/2007/04/unit-testing-private-methods.html
答案 2 :(得分:2)
我认为“为什么”可能是一个推测性问题,但如果您正在寻找一种测试私有方法的方法,我认为您可以使用.NET 4.0更轻松地完成此任务:
http://bugsquash.blogspot.com/2009/05/testing-private-methods-with-c-40.html
答案 3 :(得分:2)
在.NET中很可能使用反射访问任何私有内容。
例如,在类栏上访问名为Foo的私有实例方法将如下所示:
typeof(Bar).GetMethod("Foo",BindingFlags.NonPublic | BindingFlags.Instance);
但是,它确实需要使用反射的代码完全受信任。
(V4的安全要求会有所不同)