C# 如何获取分配给委托的函数字符串

C# 如何获取分配给委托的函数字符串,c#,.net,function,delegates,C#,.net,Function,Delegates,您可能知道,当我们在Javascript中使用此代码时: function getName() { var getName = "Hello"; return getName; } var NameString = getName; alert(NameString.toString()); 将返回 function getName() { var getName = "Hello"; return getName; } 作为字符串而不是函数调用的结果 我怎样才能在C#中

您可能知道,当我们在Javascript中使用此代码时:

function getName()
{
  var getName = "Hello";
  return getName;
}

var NameString = getName;

alert(NameString.toString());
将返回

function getName()
{
  var getName = "Hello";
  return getName;
}
作为字符串而不是函数调用的结果

我怎样才能在C#中做同样的事情

例如,如何获取分配给
代表的功能代码

提前谢谢

(附言:我想我可能需要使用
System.Reflection

内心的自我是这样想的:

public string delegate PointThat();

public string TheMethod()
{
  string getName = "Hello World";
  return getName;
}

// some function signature
{
  PointThat t = TheMethod;
  t.ToString() // returns the function string rather than invocation result   
}
简而言之,你不能(真的)

这是因为你在javascript中看到的实际上是一个对象,而不仅仅是一个函数,而C#代码产生了一个可以调用的(编译的)函数

您拥有的一些选项:

  • 通过反射获取函数的元数据;这不会公开函数内部的任何功能

  • 更进一步,反编译函数(就像Reflector那样),这仍然不会产生原始源代码,而是对它的重新编译,它应该做同样的事情

  • 保留源代码并“按需”编译,但这也需要您进行一些交互


    • 解释Javascript,编译C。在解释语言中,您在部署编译语言的编译二进制文件时部署源代码。再也没有来源了。您可以通过反射解析该方法并重新生成源代码,但这并不相同

      编辑:

      如果你编译你的C#文件,你会得到一个exe或dll或任何东西。这是二进制可执行代码,没有源代码。另一方面,Javascript始终只是文本,即源代码。如果将JS嵌入到网页中,代码仍然可以读取。尝试使用文本编辑器读取exe或dll。你不能那样做。它的二进制代码,源代码不见了。这就是为什么不能打印出方法的来源


      委托基本上也是一个(类型安全的)函数指针。这意味着它指向函数而不包含它


      如果你真的想理解这个问题,你需要理解编译器和解释器之间的区别(参见上面的两个链接)。

      嗨,谢谢你的回答,但这看起来有点难理解。请您使用一种更得体的语言。NETReflector是如何做到的?Reflector使用反射,顾名思义,来分析代码。然后,它可以重建源。原始源代码可能是VB或F#或其他任何代码。Reflector返回给您的代码可能与输入的代码不同。例如,我认为它不能正确处理lamdas。@Chris Correct!某些语言构造也可能产生相同的IL代码。反射机制将选择其中之一。。。