Showing posts with label static class. Show all posts
Showing posts with label static class. Show all posts

Thursday, April 30, 2009

Вызов статического метода через рефлексию из internal nested класса.

C#. Входные данные :
Есть сборка MyTest.dll
В ней есть такой класс ClassA:
using MyTest
{
    public class A
    {
        internal class B
        {
            internal static void DoSmth();
        }
    }
}

Решение:

//грузим dll-ку любым удобным вам способом:
Assembly assembly = Assembly.Load("Assembly text name, Version, Culture, PublicKeyToken");
Type[] types = assembly.GetType("MyTest.A").GetNestedTypes(BindingFlags.NonPublic);
Type targetType;
for (int i = 0; i < types.Length; i++)
{
    if (types[i].Name == "B")
    {
        targetType = types[i];
        break;
    }
}
BindingFlags bf = BindingFlags.Static | BindingFlags.NonPublic;
MethodInfo mi = targetType.GetMethod("DoSmth", bf);
//Так как метод статический, первым параметром в Invoke передаём null.
mi.Invoke(null, null);