c# 反射私有类和私有方法

 namespace ClassLibrary1
{
   class InnerClass//私类
    {
        public string Test(string s)
        {
            return "" + DateTime.Now + "   " + s;
        }

        public void Test2(string s)
        {
            Debug.Print(s);
        }
        private string Test3(string s)//私方法
        {
            return "private " + DateTime.Now + "   " + s ;
        }
    }
}


反射:

        [TestMethod]
        public void Test2()
        {
            var assembly = Assembly.Load("ClassLibrary1");
            var obj = assembly.CreateInstance("ClassLibrary1.InnerClass");
            var m=obj.GetType().InvokeMember("Test",BindingFlags.InvokeMethod ,null,obj, new object [] { "123"});
            Debug.Print(""+m);
            //BindingFlags类型枚举,BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod 组合才能获取到private私有方法
            var k = obj.GetType().InvokeMember("Test3", BindingFlags.NonPublic | BindingFlags.Instance |BindingFlags.InvokeMethod, null, obj, new object[] { "123" });
            Debug.Print("" + k);
        }

  

如果类只有一个带参数的构造函数,如:

public InnerClass(string s) {

Text = s;
}

那反射时候这样:

var obj = assembly.CreateInstance("ClassLibrary1.InnerClass",true,BindingFlags.CreateInstance,null,new string[] {"123" }, new System.Globalization.CultureInfo("en-US"), new object[] { });

fffffffffffffffff
test red font.
原文地址:https://www.cnblogs.com/wgscd/p/15266425.html