【问题标题】:What are the fundamental differences between Java and C# in terms of inner/local/anonymous classes?就内部/本地/匿名类而言,Java 和 C# 之间的根本区别是什么?
【发布时间】:2009-03-26 14:48:16
【问题描述】:

就内部/本地/匿名类而言,Java 和 C# 之间的根本区别是什么?

【问题讨论】:

  • 这不是骗局——看标题。它询问具体的差异。我将编辑问题以使其更清楚。
  • 我几乎不认为这符合“完全重复”的条件。
  • 重复,我不太确定 - 对我来说,这是一个非常具体的问题。如果它关闭,我会投票支持重新开放......
  • 这是这些问题的一个子集,其答案充满了涵盖语言之间差异的资源。这不是完全相同的副本,但它证明 Sasha 在提出问题之前没有努力自己搜索 SO。

标签: c# java class


【解决方案1】:

C# 没有 Java 内部类的等价物 - 它只有嵌套类型(如 Java 的“静态”嵌套类)。

访问规则略有不同 - 在 Java 中,外部类可以访问其嵌套类的私有成员,反之亦然。在 C# 中,嵌套类可以访问外部类的私有成员,但不能反过来。

C# 没有像 Java 这样的匿名内部类,但它确实有匿名方法和 lambda 表达式,这是实现大多数匿名的更简洁的方法内部类通常用于。两种机制的变量捕获是不同的 - 有关详细信息,请参阅 my article on closures。

【讨论】:

    【解决方案2】:

    在我看来,最大的区别在于它们(Java 中的匿名类与 C# 中的匿名方法)处理捕获的方式。在 java 中,它捕获变量的当前 值(然后将原始值和捕获的值隔离)。在 C# 中,您捕获变量本身。这是双刃剑,可能会导致问题 - 但如果使用得当,则非常强大。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 2014-09-04
      • 2011-11-04
      • 2010-10-16
      • 1970-01-01
      相关资源
      最近更新 更多