2009-03-26 16 views
5

Was sind die grundlegenden Unterschiede zwischen Java und C# in Bezug auf innere/lokale/anonyme Klassen?Was sind die grundlegenden Unterschiede zwischen Java und C# in Bezug auf innere/lokale/anonyme Klassen?

+0

Duplizieren von http://stackoverflow.com/questions/521305/why-should-i-learn-c http://stackoverflow.com/questions/325046/java-or-net und viele andere – Welbog

+0

Es ist nicht ein betrügen - sieh dir den Titel an. Es fragt nach bestimmten Unterschieden. Ich werde die Frage bearbeiten, um dies klarer zu machen. –

+0

Ich denke kaum, dass dies ein "genaues Duplikat" ist. –

Antwort

8

C# hat nicht das Äquivalent von Java inneren Klassen - es hat nur verschachtelte Typen (wie Javas "statische" verschachtelte Klassen).

Die Zugriffsregeln unterscheiden sich leicht - in Java hat eine äußere Klasse Zugriff auf die privaten Mitglieder der geschachtelten Klasse und umgekehrt. In C# hat die geschachtelte Klasse Zugriff auf die privaten Mitglieder der äußeren Klasse, aber nicht umgekehrt.

C# nicht über anonyme innere Klassen wie Java, aber es tut anonyme Methoden und Lambda-Ausdrücke hat, die ein viel sauberer Weg zu erreichen meist was anonyme innere Klassen werden in der Regel verwendet. Die Variable Capture für die beiden Mechanismen ist unterschiedlich - siehe my article on closures für weitere Details.

2

In meinen Augen ist der größte Unterschied, wie sie (anonyme Klassen in Java vs anonyme Methoden in C#) erfassen erfasst. In Java erfasst es den aktuellen Wert der Variablen (der ursprüngliche und erfasste Wert wird dann isoliert). In C# erfassen Sie die Variable selbst. Dies ist zweischneidig und kann zu Problemen führen - ist aber bei richtiger Anwendung unglaublich leistungsfähig.

Verwandte Themen