0

我创建了一个类库,其中有 4 个类,每个类有 1 个方法。头等舱是我的主要课程,在我的头等舱中,我有一个名为 calltoaction 的字符串,在这个字符串中,我将动态获取以下列表中的一个

  1. class2.Method2()
  2. class3.Method3()
  3. class4.Method4()

现在我想从字符串“calltoaction”执行“class2.method2”。

比如说:

class Class1
{
    public void method1()
    {
        string calltoaction = "Class2.Method2()";
    }
}

如何从字符串中执行“Class2.Method”?

4

3 回答 3

4

我不完全确定你想要完成什么,但我相信它可以以更好的方式完成。基本上,如果我正确理解您的问题,调用此函数会返回您希望执行的类和方法的名称。

如果是这样的话,我会无限期地放弃整个“字符串”并开始查看代表。

考虑一下:

public class Class2
{
    public static void Method2() { } 
} // eo class 2

public class Class3
{
    public static void Method3() { } 
} // eo class 3

public class Class4
{
    public static void Method4() { } 
} // eo class 4

现在我们来到我们的主要课程

public class MainClass
{
    private delegate void MethodDelegate();
    private List<MethodDelegate> delegates_ = new List<MethodDelegate>();

    // ctor
    public MainClass()
    {
        delegates_.Add(Class2.Method2);
        delegates_.Add(Class3.Method3);
        delegates_.Add(Class4.Method4);
    }

    // Call a method
    public void Method1()
    {
        // decide what you want to call:
        delegates_[0].Invoke(); // "Class2.Method2"
    } // eo Method1
}  // eo class Main
于 2012-07-26T15:06:13.057 回答
1

我想一种低技术的方法是使用这样的 switch 语句:

using System;

namespace ConsoleApplication24
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Which method would you like to run?");
            RunMyMethod(Console.ReadLine());
        }

        private static void RunMyMethod(string p)
        {
            switch (p)
            {
                case "MethodOne();":
                    MethodOne();
                    break;
                case "MethodTwo();":
                    MethodTwo();
                    break;
                case "MethodThree();":
                    MethodThree();
                    break;
            }
        }

        private static void MethodThree()
        {
            //Do Stuff
        }

        private static void MethodTwo()
        {
            //Do Stuff
        }

        private static void MethodOne()
        {
            //Do Stuff
        }
    }
}
于 2012-07-26T15:04:01.080 回答
1

使用 anAction而不是字符串(假设您不需要返回值。如果需要 - 使用Func):

这是为了了解如何使用它:

public Form1()
{
    InitializeComponent();

    Action<string> calltoaction;
    calltoaction = Doit;
    calltoaction("MyText1");
    calltoaction = Doit2;
    calltoaction("MyText2");
}

void Doit(string s)
{ Text = s; }

void Doit2(string s)
{ textBox1.Text = s; }
于 2012-07-26T15:41:37.050 回答