Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在运行时动态调用公共函数_C#_Wpf_Function_Dynamic_Call - Fatal编程技术网

C# 如何在运行时动态调用公共函数

C# 如何在运行时动态调用公共函数,c#,wpf,function,dynamic,call,C#,Wpf,Function,Dynamic,Call,我想在运行时按函数名调用函数,如 string srFunctionName="MyFunction"; 使用这个变量,我想调用名为“MyFunction”的函数。我怎样才能做到这一点?您可以使用: 更新: 根据评论部分的要求,这里有一个完整的实际函数示例: using System; using System.Reflection; namespace Foo.Bar { public class SomeTypeContainingYourFunction {

我想在运行时按函数名调用函数,如

string srFunctionName="MyFunction";
使用这个变量,我想调用名为“MyFunction”的函数。我怎样才能做到这一点?

您可以使用:


更新:

根据评论部分的要求,这里有一个完整的实际函数示例:

using System;
using System.Reflection;

namespace Foo.Bar
{
    public class SomeTypeContainingYourFunction
    {
        public string MyFunction(int foo, string bar, bool baz)
        {
            return string.Format("foo: {0}, bar: {1}, baz: {2}", foo, bar, baz);
        }
    }
}

namespace Bazinga
{
    class Program
    {
        static void Main()
        {
            var strFunctionName = "MyFunction";
            var t = Type.GetType("Foo.Bar.SomeTypeContainingYourFunction");
            var instance = Activator.CreateInstance(t);
            var arguments = new object[] { 1, "foo", false };
            var result = t.InvokeMember(
                strFunctionName, 
                BindingFlags.InvokeMethod, 
                null, 
                instance, 
                arguments
            );
            Console.WriteLine(result);
        }
    }
}
您可以使用:


更新:

根据评论部分的要求,这里有一个完整的实际函数示例:

using System;
using System.Reflection;

namespace Foo.Bar
{
    public class SomeTypeContainingYourFunction
    {
        public string MyFunction(int foo, string bar, bool baz)
        {
            return string.Format("foo: {0}, bar: {1}, baz: {2}", foo, bar, baz);
        }
    }
}

namespace Bazinga
{
    class Program
    {
        static void Main()
        {
            var strFunctionName = "MyFunction";
            var t = Type.GetType("Foo.Bar.SomeTypeContainingYourFunction");
            var instance = Activator.CreateInstance(t);
            var arguments = new object[] { 1, "foo", false };
            var result = t.InvokeMember(
                strFunctionName, 
                BindingFlags.InvokeMethod, 
                null, 
                instance, 
                arguments
            );
            Console.WriteLine(result);
        }
    }
}

下面是一个关闭a
表单的示例

object instance = form;
Type myType = form.GetType();

myType.InvokeMember("Close", BindingFlags.InvokeMethod, null, instance, null);

下面是一个关闭a
表单的示例

object instance = form;
Type myType = form.GetType();

myType.InvokeMember("Close", BindingFlags.InvokeMethod, null, instance, null);

可以使用反射创建类的对象,然后使用该对象调用函数

    object Instance = Activator.CreateInstance(t); // t is type
    MethodInfo mi = t.GetMethod(srFunctionName); 
    if (mi != null)
            mi.Invoke(Instance, args);
    else
           logError();

可以使用反射创建类的对象,然后使用该对象调用函数

    object Instance = Activator.CreateInstance(t); // t is type
    MethodInfo mi = t.GetMethod(srFunctionName); 
    if (mi != null)
            mi.Invoke(Instance, args);
    else
           logError();

你好谢谢你的回答。你能给出一个完整的例子,包括一些基本的实函数吗。这真令人困惑。我还将HtmlDocument Variable作为参数传递给函数。HtmlDocument是htmlagilitypack的对象。@MonsterMMORPG,当然,我已经包含了一个完整的示例。请检查我的更新答案。你好。谢谢你的回答。你能给出一个完整的例子,包括一些基本的实函数吗。这真令人困惑。我还将HtmlDocument Variable作为参数传递给函数。HtmlDocument是htmlagilitypack的对象。@MonsterMMORPG,当然,我已经包含了一个完整的示例。请检查我的更新答案。