0

各クラスに1つのメソッドを持つ4つのクラスを持つクラスライブラリを作成しました。最初のクラスは私にとってメイン クラスです。私の最初のクラスには、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 に答える