我的意思是,是否可以创建一个与
等效的程序public class PrintOwnSourceCode
{
public static void Main ( )
{
System.Console.WriteLine([something]);
// prints "public class PrintOwnSourceCode { public static void Main ( ) { ... } }"
}
}
???
这会是反射的一个例子吗?
答案 0 :(得分:2)
有点。
反编译器可以做类似的事情: I just decompiled a decompiler so I could use it to decompile itself
.NET反编译器,如[.NET Reflector](http://www.red-gate.com/products/dotnet-development/reflector/)和dotPeek,能够反映.NET程序集并生成类似于源代码的文件。它看起来与源代码不完全相同,因为编译和反编译有点像将英语翻译成法语然后再翻译成英语 - 结果并不总是保证为1:1,因为谷歌翻译可以证明。为了便于阅读但编译器不需要的信息(如空白)将在反编译过程中丢失。因此,您的应用程序可以自行反编译或调用外部反编译器进行自我打印。
<强>除了强>
在编译语言中,编译后的代码无法直接访问源代码。 (公司通常不会将带有编译代码的源代码发送给客户。他们只发送已编译的可执行文件。)当涉及到解析语言(如JavaScript)时,它就是一个完全不同的故事。由于源必须可供运行时使用以便可以对其进行解析和运行,因此代码始终可以找到它自己的源文件,打开它并打印出来。
答案 1 :(得分:0)