在内部/本地/匿名类方面,Java和C#之间的根本区别是什么?

时间:2009-03-26 14:48:17

标签: c# java class

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

2 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:2)

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