【发布时间】:2018-07-20 11:34:29
【问题描述】:
听说C#是一种纯面向对象的编程语言,因为所有的东西都源自System.Object。
所以我怀疑方法本身的 type 是什么。我尝试使用StackTrace 和StackFrame 来获取方法的类型,但我只得到了类的名称,即声明了哪些方法。
当然,我试过这个:
var func = new TestClass().TestMethod; //TestMethod is a method of TestClass
但是我只得到了这个错误。
CS0815 Cannot assign method group to an implicitly-typed variable
方法可以分配给Func<..., TResult>typed 变量。我用 Func 和返回字符串的方法进行了测试,然后我得到了这个:
// Result of
// Func<string> func = new TestClass().TestMethod;
// func.GetType();
Instance TestClass -> TestMethod Type : System.Func`1[System.String]
但它的类型名是Func<string>。那么,方法的真正类型名是什么?
编辑 2018 年 2 月 10 日上午 1:46,KST(格林威治标准时间 +09:00)
好吧,我总结一下。函数本身没有类型,也不是对象,Delegate / Func<> 只是 .NET Framework 的一个特性,可以作为一等公民处理函数(但它不是 FCC )。对吗?
【问题讨论】:
-
你可能在原生 C++ 中很常见,它可能将返回类型 T 的任何函数分配给 T 上的任何指针。然后像这样调用它。好吧,.NET Framework 设计团队竭尽全力,因此您永远不必处理裸指针。代表只是这些替代品之一。我个人觉得这种方式更好,因为编译器可以检查你所做的事情是否有意义。
-
方法不是对象,因此它没有类型。 C# 中的方法是将函数附加到类的面向对象的方式,但它们不像 JavaScript 中的函数那样是一等公民。