Aufrufen eines Mitglieds einer Klasse unter Verwendung des Klassennamens und des Methodennamens

Ich versuche die Funktion einer Klasse mit aufzurufenReflection (unter der Annahme, dass die Objektinitialisierung keine Abhängigkeit von der aufzurufenden Funktion hat)

/// <summary>
    /// Calls a static public method. 
    /// Assumes that the method returns a string
    /// </summary>
    /// <param name="assemblyName">name of the assembly containing the class in which the method lives.</param>
    /// <param name="namespaceName">namespace of the class.</param>
    /// <param name="typeName">name of the class in which the method lives.</param>
    /// <param name="methodName">name of the method itself.</param>
    /// <param name="stringParam">parameter passed to the method.</param>
    /// <returns>the string returned by the called method.</returns>
    /// 
    public static string InvokeStringMethod5(string assemblyName, string namespaceName, string typeName, string methodName, string stringParam)
    {
        //This method was created incase Method has params with default values. If has params will return error and not find function
        //This method will choice and is the preffered method for invoking 

        // Get the Type for the class
        Type calledType = Type.GetType(String.Format("{0}.{1},{2}", namespaceName, typeName, assemblyName));
        String s = null;

        // Invoke the method itself. The string returned by the method winds up in s.
        // Note that stringParam is passed via the last parameter of InvokeMember, as an array of Objects.

        if (MethodHasParams(assemblyName, namespaceName, typeName, methodName))
        {
            s = (String)calledType.InvokeMember(
                        methodName,
                        BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,
                        null,
                        null,
                        new Object[] { stringParam });
        }
        else
        {
            s = (String)calledType.InvokeMember(
            methodName,
            BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,
            null,
            null,
            null);
        }

        // Return the string that was returned by the called method.
        return s;

    }

    public static bool MethodHasParams(string assemblyName, string namespaceName, string typeName, string methodName)
    {
        bool HasParams;
        string name = String.Format("{0}.{1},{2}", namespaceName, typeName, assemblyName);
        Type calledType = Type.GetType(name);
        MethodInfo methodInfo = calledType.GetMethod(methodName);
        ParameterInfo[] parameters = methodInfo.GetParameters();

        if (parameters.Length > 0)
        {
            HasParams = true;
        }
        else
        {
            HasParams = false;
        }

        return HasParams;

    }  

Dies wurde in Form gebrachtHier.

Gibt es eine andere / bessere Möglichkeit, dies zu tun?

Kann diese Aktivität Generalship sein? Wie mitDynamic und kann anrufenNon-Static methods in .Net 4.0, damit der Rückgabetyp unabhängig sein kann.

Ich habe noch nie benutztdynamic Schlüsselwort im aktuellen Szenario (lesen Sie nur einige Beispiele) zur tatsächlichen Verwendung, die mir noch unbekannt ist

Jede Hilfe / Anweisung in dieser Hinsicht wäre dankbar

Antworten auf die Frage(2)

Ihre Antwort auf die Frage