如何在 C# 中从特殊函数(仅使用它们的字符串名称)调用类中的其他函数
本文关键字:函数 字符串 其他 调用 | 更新日期: 2023-09-27 18:32:03
我有一个名为 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
}
我一开始使用反射...但是我正在为类中的公共变量分配一些值。当反射创建新实例时,我在公共变量中的所有数据都会丢失。
有什么特别的原因吗,你需要将它们存储为字符串。如果它们都是同一类中的无参数 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/en-us/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# 无法知道它们的引用