2

我试图在枚举中列出我的一些类的方法,以便我可以根据所选的枚举调用这些方法。我尝试使用 ToString() 和 GetMethod(string) 没有运气。如果有更好的方法来动态更改我的委托将从枚举列表中调用的方法,我将不胜感激!我对 C# 很陌生,我也想知道是否有其他存储方法指针的方法。我研究了对这些板上的反思,并且在从枚举中进行铸造或分配方面都没有太多运气。

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()

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

    myDel = eList.ToString();

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

    myDel(); //doesn't work

}


public void FirstFunction() {

    Debug.Log("First function called");

}

public void SecondFunction() {

    Debug.Log("Second function called");

}
4

2 回答 2

1

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

myDel = eList.ToString();

您可以使用该Delegate.CreateDelegate方法。

像这样的东西适用于工作实例方法:

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

或者这个静态方法:

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

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

于 2013-07-23T04:38:16.527 回答
0

如果您有兴趣,另一种选择是通过以下方式使用反射MethodInfo

var method = typeof(YourClass).GetMethod(eList.ToString());
method.Invoke(new YourClass(), null);
于 2013-07-23T04:48:42.940 回答