编辑:嗯,我不认为这是其他有关var的问题的重复。我问的是Reflection,只是很好奇是否应该像var那样谨慎使用
也要特别感谢Flydog57在评论中的回应,我很感激他们编辑
如果我的问题不正确,请原谅我,第一次发布我自己的问题。我试图使自己的代码更合适,同时也尝试使我从未尝试过的东西能够正常工作〜 玩弄代码,看看我能做什么和不能做什么。即使没有真正的目的或目的。只是将其用作娱乐自己和随身学习的方式。
我当前的项目是让一个脚本向另一文件中添加更多行代码。当我意识到代码只是文本时,我就想到了这一点,您可以编写将文本添加到文件中的代码。 因此,我正在考虑编写可以调用的新方法的代码。为此,我必须能够通过字符串名称调用方法。所以我研究了我是否可以做这样的事情。这就是我发现的:
Type thisType = this.GetType(); MethodInfo theMethod = thisType.GetMethod(TheCommandString); theMethod.Invoke(this, userParameters);
ottobar的回复here
我知道某些语言不应该做某些事情。
就像C#可以使用var
或dynamic
一样,但是最好避免使用它们。
我的理解是这是因为C#(与Python等不同)喜欢使用“已知”,而不喜欢“未知”
Type thisType = this.GetType();
应该只在var
和dynamic
这样非常特殊的情况下使用吗?
答案 0 :(得分:0)
您仅应使用(... MethodInfo theMethod = thisType.GetMethod(TheCommandString) 当您无权访问方法(TheCommandString)或类时,因此它通常可用于构建DI或newtonsoft或automapper之类的库。
因此在您的示例中,如果您有权访问方法(TheCommandString),则应直接调用该对象(object.TheCommandString(userParameters)),如果您无权访问(例如:其在dll中的私有方法),则您可以使用反射。