我听说C#是一种纯粹的面向对象的编程语言,因为所有的东西都源于System.Object.
所以我怀疑方法本身的类型是什么.我尝试使用StackTrace和StackFrame获取方法的类型,但我得到了类的名称,声明了哪些方法.
当然,我试过这个:
var func = new TestClass().TestMethod; //TestMethod is a method of TestClass
Run Code Online (Sandbox Code Playgroud)
但是我只得到了这个错误.
CS0815 Cannot assign method group to an implicitly-typed variable
Run Code Online (Sandbox Code Playgroud)
可以将方法分配给Func<..., TResult>类型变量.我用Func和返回字符串的方法测试,然后我得到了这个:
// Result of
// Func<string> func = new TestClass().TestMethod;
// func.GetType();
Instance TestClass -> TestMethod Type : System.Func`1[System.String]
Run Code Online (Sandbox Code Playgroud)
但它是一个类型名称Func<string>.那么,方法的真正类型名称是什么?
编辑2018年2月10日上午01:46,KST(GMT +09:00)
好吧,让我总结一下.函数本身没有类型,也不是对象,并且Delegate/ Func<>是.NET Framework的一个功能,它将函数作为一等公民处理(但它不是FCC).这是对的吗?
方法没有类型.方法就是它们 - 只是对象或类的"可调用函数".您可以将它们分配给Delegates或Func具有相同签名的事实只是框架的一个特征,但该方法本身没有任何"类型".
与类型最接近的可能是方法的返回值(如果有的话).