c#,内部和反思

cyb*_*nte 1 c# reflection internal

有没有办法通过反射执行"内部"代码?

这是一个示例程序:

using System;
using System.Reflection;

namespace ReflectionInternalTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Assembly asm = Assembly.GetExecutingAssembly();

            // Call normally
            new TestClass();

            // Call with Reflection
            asm.CreateInstance("ReflectionInternalTest.TestClass", 
                false, 
                BindingFlags.Default | BindingFlags.CreateInstance, 
                null, 
                null, 
                null, 
                null);

            // Pause
            Console.ReadLine();
        }
    }

    class TestClass
    {
        internal TestClass()
        {
            Console.WriteLine("Test class instantiated");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

创建一个测试类通常是完美的,但是当我尝试通过反射创建一个实例时,我得到一个missingMethodException错误,说它无法找到构造函数(如果你尝试从程序集外部调用它会发生什么).

这是不可能的,还是我可以做一些解决方法?

JP *_*oto 5

这是一个例子......

  class Program
    {
        static void Main(string[] args)
        {
            var tr = typeof(TestReflection);

            var ctr = tr.GetConstructor( 
                BindingFlags.NonPublic | 
                BindingFlags.Instance,
                null, new Type[0], null);

            var obj = ctr.Invoke(null);

            ((TestReflection)obj).DoThatThang();

            Console.ReadLine();
        }
    }

    class TestReflection
    {
        internal TestReflection( )
        {

        }

        public void DoThatThang()
        {
            Console.WriteLine("Done!") ;
        }
    }
Run Code Online (Sandbox Code Playgroud)