【问题标题】:Do functors have an equivalent in C#? [duplicate]仿函数在 C# 中有等价物吗? [复制]
【发布时间】:2013-06-16 17:43:29
【问题描述】:

C# 中是否有与 Functors 等效的内容?

C#Func<,>delegates 和 匿名方法,但这些指针不都是指向方法的吗?

C++Functor 是一个,而不是一个指向方法的指针

【问题讨论】:

  • 这个答案可能对stackoverflow.com/a/974639/187697有帮助
  • 我看到了,但它们是针对他的问题的,而不是笼统的。
  • 那个答案有一个近似值列表。

标签: c# c++ functor


【解决方案1】:

C# 有 Func、委托和匿名方法但这些不都是指向方法的指针吗?

没有。甚至 C# 委托也是类,由编译器为您实现。这些生成的类(代表)派生自MulticastDelegate,而Delegate又派生自Delegate

简而言之,委托是编译器生成的类的语法糖。

【讨论】:

  • 好的。那些会类似于 Functors 吗?
  • @4thSpace:“相似”在什么意义上?在 C# 中,不能重载 operator()。所以,如果你是那个意思,那就不相似了。 C# 是一种不同的语言,它做的事情很少,实现方式也不同。
  • 运算符()?您指的是与msdn.microsoft.com/en-us/library/aa288467(v=vs.71).aspx 不同的东西吗?
  • @4thSpace:如果你不知道operator(),那你怎么知道C++中的函子是什么?什么使 C++ 中的类函子?
  • 委托类似于函子,因为调用被指向方法的语法看起来就像一个普通的函数调用。
【解决方案2】:

lambdasFunc<>Action<>)和委托(命名和匿名)都是类。

如果您需要一个指向方法的指针(例如,将其传递到不安全的代码中),您应该使用编组

IntPtr pFunc = Marshal.GetFunctionPointerForDelegate(myDelegate);

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    相关资源
    最近更新 更多