使用C#的类型(反射)是不好的做法吗?

时间:2019-11-30 05:59:05

标签: c# reflection types

编辑:嗯,我不认为这是其他有关var的问题的重复。我问的是Reflection,只是很好奇是否应该像var那样谨慎使用

也要特别感谢Flydog57在评论中的回应,我很感激他们编辑

如果我的问题不正确,请原谅我,第一次发布我自己的问题。我试图使自己的代码更合适,同时也尝试使我从未尝试过的东西能够正常工作〜 玩弄代码,看看我能做什么和不能做什么。即使没有真正的目的或目的。只是将其用作娱乐自己和随身学习的方式。

我当前的项目是让一个脚本向另一文件中添加更多行代码。当我意识到代码只是文本时,我就想到了这一点,您可以编写将文本添加到文件中的代码。 因此,我正在考虑编写可以调用的新方法的代码。为此,我必须能够通过字符串名称调用方法。所以我研究了我是否可以做这样的事情。这就是我发现的:

Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(TheCommandString);
theMethod.Invoke(this, userParameters);
     

ottobar的回复here

我知道某些语言不应该做某些事情。 就像C#可以使用vardynamic一样,但是最好避免使用它们。

我的理解是这是因为C#(与Python等不同)喜欢使用“已知”,而不喜欢“未知”

太久没读:

Type thisType = this.GetType();应该只在vardynamic这样非常特殊的情况下使用吗?

1 个答案:

答案 0 :(得分:0)

您仅应使用(... MethodInfo theMethod = thisType.GetMethod(TheCommandString) 当您无权访问方法(TheCommandString)或类时,因此它通常可用于构建DI或newtonsoft或automapper之类的库。

因此在您的示例中,如果您有权访问方法(TheCommandString),则应直接调用该对象(object.TheCommandString(userParameters)),如果您无权访问(例如:其在dll中的私有方法),则您可以使用反射。