[英]How Can i call other functions in a class from special function(Just with their string names) in C#?
我有一個名為GoldClass
的類。 它有四個方法,分別命名為F()
, S()
, TH()
, Fo()
。 在方法FO()
。 我想調用其他三個方法(F,S,TH),但是只使用它們的名稱。
public void Fo()
{
list <string> FuncsList=new list<string>();
FuncsList.Add("F");
FuncsList.Add("S");
FuncsList.Add("TH");
//NOW I WANT TO CALL THEM BUT USE MY STRINGS IN MY FUNCSLIST
}
我最初使用了Reflection ...,但是我為類中的公共變量分配了一些值。當Reflection成為新實例時,我所有在公共變量中的數據都丟失了。
是否有任何特殊原因,您需要將它們存儲為字符串。 如果它們都是同一類中的無參數void方法,則可以將它們存儲為Action
。
void Main()
{
A();
}
public void A()
{
List<Action> list = new List<Action>();
list.Add(B);
list.Add(C);
list.Add(D);
foreach(Action action in list){
action();
}
}
public void B()
{
Console.WriteLine("B Called");
}
public void C()
{
Console.WriteLine("C Called");
}
public void D()
{
Console.WriteLine("D Called");
}
話雖這么說,但根本不清楚為什么需要這樣做。 為什么需要動態執行此操作。 以下內容是否足夠?
public void FO()
{
F();
S();
TH();
}
您可以使用字符串來調用函數。 檢查此鏈接以獲取更多信息http://msdn.microsoft.com/zh-cn/library/system.type.invokemember.aspx
您可以為此使用字符串和動作的字典:
public class Example
{
private Dictionary<string, Action> _map = new Dictionary<string, Action>();
public Example()
{
_map["A"] = A;
_map["B"] = B;
_map["C"] = C;
}
public void A() { }
public void B() { }
public void C() { }
public void CallByString(string func)
{
if(_map.ContainsKey(func))
_map[func]();
}
}
用法:
Example example = new Example();
example.CallByString("A");
您有兩種選擇:使用反射。 或使用某種switch語句,以后速度更快。
public void Fo()
{
list <string> FuncsList=new list<string>();
FuncsList.Add("F");
FuncsList.Add("S");
FuncsList.Add("TH");
foreach(String name in FuncsList)
CallNamedMethod(name);
}
private void CallNamedMethod(string name)
{
switch(name)
{
case "F":
F();
return;
case "S":
S();
return;
case "TH":
TH();
return;
default:
throw new InvalidArgumentException();
}
}
如果您可以調用大量不同的方法,則可以創建包含名稱和委托的字典。
祝您一切順利。
它們所屬的C#的Call Direct程序集不知道它們的引用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.