关于c#:使用枚举列表作为委托方法

Using enum list as methods with delegate

我试图在枚举中列出一些类的方法,以便根据所选枚举调用这些方法。我尝试使用toString()和getMethod(string),但没有成功。如果有更好的方法来动态地更改我的委托将从枚举列表中调用的方法,我将非常感谢您的帮助!我对C非常陌生,我还想知道是否有其他方法可以存储方法指针。我看了看这些木板上的倒影,发现无论是从Enums进行的铸造还是分配,我都不太幸运。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public enum funcEnum { FirstFunction, SecondFunction };

public funcEnum eList;

public delegate void Del();

public Del myDel;


void Start() {

    myDel = FirstFunction; //pre-compiled assignment

    myDel(); //calls 'FirstFunction()' just fine

下面的这个可以在运行时更改,它通常不在start()中。

1
2
3
    eList = funcEnum.SecondFunction; //this could be changed during runtime

    myDel = eList.ToString();

明显的错误,mydel正在查找方法,不确定如何检索/转换枚举值到要分配给委托的方法,试图调用具有分配先验知识的方法。基本上希望枚举列表包含此类中方法的名称。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    myDel(); //doesn't work

}


public void FirstFunction() {

    Debug.Log("First function called");

}

public void SecondFunction() {

    Debug.Log("Second function called");

}


不能简单地将字符串赋给方法/委托。而不是这个:

1
myDel = eList.ToString();

您可以使用Delegate.CreateDelegate方法。

对于工作实例方法,如下所示:

1
myDel = (Del)Delegate.CreateDelegate(typeof(Del), this, eList.ToString());

对于静态方法:

1
myDel = (Del)Delegate.CreateDelegate(typeof(Del), this.GetType(), eList.ToString());

注意,我假设在这两种情况下,方法都是在调用代码的同一类上定义的。您必须稍微修改一下,才能在另一个对象上调用方法。


如果您感兴趣,另一种选择是通过MethodInfo使用反射:

1
2
var method = typeof(YourClass).GetMethod(eList.ToString());
method.Invoke(new YourClass(), null);