Как правильно использовать GetMethod из пространства имен? - PullRequest
0 голосов
/ 28 марта 2019

Например, у нас есть следующий код, предоставленный Microsoft

public class MagicClass
{
    private int magicBaseValue;

    public MagicClass()
    {
        magicBaseValue = 9;
    }

    public int ItsMagic(int preMagic)
    {
        return preMagic * magicBaseValue;
    }
}

public class TestMethodInfo
{
    public static void Main()
    {
        // Get the constructor and create an instance of MagicClass

        Type magicType = Type.GetType("MagicClass");
        ConstructorInfo magicConstructor = magicType.GetConstructor(Type.EmptyTypes);
        object magicClassObject = magicConstructor.Invoke(new object[]{});

        // Get the ItsMagic method and invoke with a parameter value of 100

        MethodInfo magicMethod = magicType.GetMethod("ItsMagic");
        object magicValue = magicMethod.Invoke(magicClassObject, new object[]{100});

        Console.WriteLine("MethodInfo.Invoke() Example\n");
        Console.WriteLine("MagicClass.ItsMagic() returned: {0}", magicValue);
    }
}

// The example program gives the following output:
//
// MethodInfo.Invoke() Example
//
// MagicClass.ItsMagic() returned: 900

MethodInfo magicMethod = magicType.GetMethod("ItsMagic");, где программа сломалась бы, если бы мы вложили весь этот фрагмент кода в любое пространство имен по нашему выбору.

Исключением является следующее: System.NullReferenceException: 'Object reference not set to an instance of an object.'

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Если вы прочитали документы :

typeName

Завершенное сборкой имя типа для получения. Смотри AssemblyQualifiedName. Если тип находится в текущей выполняемой сборке или в Mscorlib.dll, достаточно указать имя типа, соответствующее его пространству имен.

Таким образом, вы должны как минимум указать пространство имен, когда MagicClass заключено в пространство имен:

Type magicType = Type.GetType("YourNameSpace.MagicClass");

в противном случае он вернет null.

0 голосов
/ 28 марта 2019

Получить пространство имен динамически, если оно находится в том же пространстве имен.

        string ns = typeof(TestMethodInfo).Namespace;
        Type magicType = Type.GetType(ns + ".MagicClass");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...