Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.NET Reflector的示例_C#_.net - Fatal编程技术网

C# 使用.NET Reflector的示例

C# 使用.NET Reflector的示例,c#,.net,C#,.net,作为一名不熟悉.NET和C#的程序员,我发现使用.NET Reflector是一个非常有用的工具,可以用来查看“专业人士”是如何编写代码的 有人能推荐好的基于.NET的应用程序在桌面应用程序中使用Reflector吗?任何应用程序示例都将不胜感激。想不出任何现成的应用程序,但您可能需要获取一些开源资料并进行编译。这样,当MSIL变得混乱时,您将有可参考的源代码 我发现它有很多好的示例程序可用于各种不同的用途。虽然,我主要使用它来C++应用程序,我还没有查看.NET程序。我的猜测是,它们也一样好。

作为一名不熟悉.NET和C#的程序员,我发现使用.NET Reflector是一个非常有用的工具,可以用来查看“专业人士”是如何编写代码的


有人能推荐好的基于.NET的应用程序在桌面应用程序中使用Reflector吗?任何应用程序示例都将不胜感激。

想不出任何现成的应用程序,但您可能需要获取一些开源资料并进行编译。这样,当MSIL变得混乱时,您将有可参考的源代码


我发现它有很多好的示例程序可用于各种不同的用途。虽然,我主要使用它来C++应用程序,我还没有查看.NET程序。我的猜测是,它们也一样好。

我通常使用反射器来回答基于效率/性能的问题。例如,我想知道在比较字符串时是否最好使用==运算符或.Equals()。。。或者如果有什么关系的话。在Reflector中打开System.String程序集,您将通过检查发生的方法调用和操作得到答案。

我认为它主要用于.NET核心和补充程序集。例如,如果您想知道
Parallel.Invoke
是如何工作的,只需打开Reflector并成为一个小wizer。不过要注意,
mscorlib
有很多P/invoke引用,由于明显的原因,您无法将其反汇编。

我最常使用它的是,当我对一段代码在文档未涵盖的情况下的功能有疑问时。例如,当我第一次尝试为旧的ASP.NET webforms模型创建复杂的web控件时,我经常会思考很多问题。整个调用堆栈非常复杂,文档也不是最友好的

我现在使用reflector的第一个原因可能是为了看看调用可能抛出哪些异常。net文档最大的缺点之一是,它通常只告诉您当前方法在异常方面抛出了什么。例如,如果方法A可能抛出异常1,而方法A调用方法B,方法B可能抛出异常2,那么在方法A的文档中,您只会被告知异常1。有时,您甚至无法获得异常


我使用reflector最酷的原因之一就是我想创建一种动态方法。DynamicMethods允许您通过IL调用构造方法;它介于反射(慢)和在内存中编译自己的程序集(执行快但启动慢)之间。我想创建一个小类来检查测试期间是否触发了事件。。。无论如何,我不知道如何编写IL,所以我所做的就是用一个类创建一个程序集,该类完全按照我在DynamicMethod中想要做的做,编译它,然后在Reflector中查看IL。这本身就是一个令人满意的练习,我可能会使用同样的技术来做一些更复杂的语句解析/编译…

我使用它的主要原因是探索各种基本上做同样事情的.NET方法的效率。

我在开发过程中使用reflector来检查编译器如何将C#转换为IL,我做了很多工作,比如反射,发射和反射。我还使用它快速查看我的代码;当您拥有一个大型dll库时,我发现将dll+xml从构建服务器简单地拖动到reflector中比将每个项目加载到VS中要快,特别是如果我不能100%确定代码的位置


您还可以将插件用作代码片段的测试平台。

我最近倾向于使用Reflector来查找类都使用了哪些接口。有时,分析一个类在命名空间的其他部分中的使用位置并找出如何实现它是很有帮助的


如果源代码不可用,查看Reflector中的代码可能会有所帮助,但大多数情况下,最好找到代码本身,因为这至少会让您了解代码是如何实际编写的。因为Reflector正在查看IL,所以代码是针对计算机而不是人类可读性“优化”的。此外,如果开发人员花时间在代码中添加任何注释(我知道这很少见,但确实发生了),Reflector将不会有这些注释,因此从这些注释中收集到的任何见解都不会存在。

由于我们的应用程序使用了多个许可组件,因此我使用Reflector来查看嵌入可执行文件的许可证。基于我期望通过Reflector看到的内容,我还编写了单元测试,以确保所需的许可证存在,即使是在构建服务器上构建的。

无论谁-'d是个混蛋。+'作为对策,现在我们有了源代码!哇,我得看看。我想知道微软是否使他们的OpenType API开源。。。不知怎的,我对此表示怀疑。同样的,我也怀疑;当然,在.NET3.5中(在4.0中甚至更多),表达式是一个可行的(保持理智的)替代方案,但您仍然需要了解如何创建表达式-P