【发布时间】:2020-03-25 13:46:12
【问题描述】:
edit 嗯,我不认为这是其他关于 var 的问题的重复。我在问反射,只是好奇它是否应该像 var 一样谨慎使用
还要特别感谢 Flydog57 在 cmets 中的反应,我很感激他们~ edit
如果我的问题不恰当,请原谅我,第一次发布我自己的问题。我正在努力使我的代码更正确,同时也试图让我以前从未尝试过的东西工作〜 玩弄代码,看看我能做什么,不能做什么。即使它没有真正的意义或目的。只是用它来娱乐自己和边走边学。
我当前的项目是让一个脚本将更多行代码添加到另一个文件中。当我意识到代码只是文本时,我想到了这一点,您可以编写将文本添加到文件的代码。 所以我正在考虑编写可以调用的新方法的代码。为此,我必须能够通过字符串名称调用方法。所以我研究了我是否可以做这样的事情。这就是我发现的:
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?
【问题讨论】:
-
没有理由回避
var;这是一个非常有用的关键字。 -
有些情况需要反思。 AutoMapper 等映射库使用反射。依赖注入库和 ORM 也是如此。
-
不完全,我知道什么时候使用var,但我也知道不小心使用它是不合适的或不推荐的。我在问 Type 是否应该以同样的方式使用,小心
-
使用
var是免费的。无论何时使用,编译器都必须完全知道该类型。在某些情况下,唯一的成本是可读性。反射确实有一些成本,特别是当您使用它来查看某些东西时。调用 MethodInfo 比调用函数更昂贵,但也不算多。在您展示的示例中,如果您缓存/记忆theMethod,您将遥遥领先
标签: c# reflection types