我在ddl文件中有这个类:
namespace A
{
internal class PW
{
static PW()
{
//code
}
internal static string G(int num)
{
//more code
}
}
}
但是,当我这样称呼时:
using System;
using System.Reflection;
namespace PW_tester
{
public class Program
{
static void Main(string[] args)
{
MethodInfo method = typeof (PW).GetMethod("G", BindingFlags.FlattenHierarchy | BindingFlags.Static | BindingFlags.NonPublic, null, new Type[] {typeof(int)}, null);
}
}
}
我得到null
作为方法变量的值。
那是我的整个计划。
项目中引用了dll文件,找到了PW类。
我知道我不能用
调用它A.PW.G(0);
但是我将无法访问内部类/方法错误,这至少证明程序知道它的存在。
如何调用G
方法?
答案 0 :(得分:0)
您的方法采用int
参数,而不是string
。
试试这个:
var method = typeof(PW).GetMethod(
"G",
BindingFlags.FlattenHierarchy | BindingFlags.Static | BindingFlags.NonPublic,
null,
new Type[] { typeof(int) }, //parameter is of type int
null);
这将获得一个显示方法类型信息的MethodInfo
。以下是如何使用它来调用方法:
var result = (string)method.Invoke(null, new object[] {5}); //pass 5 as the int parameter
答案 1 :(得分:0)
internal
类不能反映在AppDomain
之外。
结果如下:
参考:https://msdn.microsoft.com/en-us/library/ha94aebs.aspx
编辑1
我能够通过手动加载程序集来实现它:
class Program
{
static void Main(string[] args)
{
var asy = Assembly.LoadFrom(@"<path>\A.dll");
var pw = asy.GetTypes()[0];
var method = pw.GetMethod("G", BindingFlags.NonPublic|BindingFlags.Static);
}
}