我想检索实现接口的类的私有(实现和其他)方法,并且也是从(继承)基类派生的。
这就是我想要做的。我需要查看这些私有方法及其内容。我不想调用它们。
Dim assembly As System.Reflection.Assembly
Dim assemblyName As String assemblyName = System.IO.Path.GetFullPath("xyz.dll")
assembly = System.Reflection.Assembly.LoadFile(assemblyName)
assembly.GetType("myClass").Getmethods(Bindings.NonPublic)
assembly.GetType("myClass").GetMethods(BindingFlags.NonPublic)
无效。
答案 0 :(得分:3)
假设您正在尝试使用第三方程序集的私有方法:
我要求谨慎使用私人方法,因为某种原因而将其私有化 可能依赖某些你无法预料的状态;此外,如果将来更新程序集,可能会更改或删除私有行为,导致您必须重新编写代码以进行补偿。
但是,如果您想继续,可以使用两种方法。 我们在.net 4中使用新的Dynamic关键字的一种方式:
http://igoro.com/archive/use-c-dynamic-typing-to-conveniently-access-internals-of-an-object/
要使用反射,这个问题可能会对您有所帮助:
How do I use reflection to invoke a private method?
希望这有帮助。
答案 1 :(得分:1)
BindingFlags
您必须指定实例或静态以及Public或NonPublic,否则将不会返回任何成员。
答案 2 :(得分:0)
Assembly myAssembly;
myAssembly = Assembly.LoadFrom(@"c:\xyz.dll");
Type myType = myAssembly.GetTypes()[0]; //change 0 according to your class type.
BindingFlags eFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
MethodInfo myMethod = myType.GetMethod("Methodname", eFlags);
object obj1 = myAssembly.CreateInstance(myType.FullName);
object obj2 = myMethod.Invoke(obj1, new object[2] { parameters1, parameters1 });