Innere Klasse?
-
Gibts eigentlich innere Klassen in .NET? Ich meine, wie in Java.
-
Servus,
meinst du sowas hier:
dann ja
*winke*
Hellsgore
-
und hier auch noch ein link
sie nennen es: verschachtelte klassen
http://www.galileocomputing.de/openbook/csharp/kap08.htm#Xxx164030
ps: also keine inneren
-
Schade, das einzige was Java interessant macht haben sie nicht geklaut
-
Die haben leider viele interessante Sachen nicht geklaut, z.B. kovariante Referenzen auf generische Typen (List<? extends Foo>). Das hätt ich jetzt schon zwei mal gut brauchen können.
-
Schade, das einzige was Java interessant macht haben sie nicht geklaut
Naja, verschachtelte Klassen in C# entsprechen soweit ich weiß
statische lokale Klassen in Java. Normale lokale Klassen aus
Java kann man sich dann damit eben nachbilden.
-
er meinte, soviel ich ihn verstanden habe, die elementklassen:
Eine Mitgliedsklasse (engl. member class), auch Elementklasse genannt, ist ebenfalls vergleichbar mit einem Attribut, nur ist es nicht statisch. (Statische innere Klassen lassen sich aber auch als statische Mitgliedsklassen bezeichnen.) Die innere Klasse kann zusätzlich auf alle Attribute der äußeren Klasse zugreifen. Dazu zählen auch die privaten Eigenschaften, eine Designentscheidung, die sehr umstritten ist und kontrovers diskutiert wird.
also die nicht statischen.
so long
-
Optimizer schrieb:
Die haben leider viele interessante Sachen nicht geklaut, z.B. kovariante Referenzen auf generische Typen (List<? extends Foo>). Das hätt ich jetzt schon zwei mal gut brauchen können.
Natürlich. Das vermiss ich auch ständig! LOL. Nerd
-
Optimizer schrieb:
Die haben leider viele interessante Sachen nicht geklaut, z.B. kovariante Referenzen auf generische Typen (List<? extends Foo>).
Das gabs ja noch nicht, als das Klauen stattfand. Oder?
-
Java hatte vor C# Generics, bzw. C# hat sie ja eigentlich immer noch nicht (nur in der Beta).
-
Aber MS arbeitet doch an der CLR 2.0 schon was länger. Sie fangen ja nicht erst an dem Tag, an dem sie es ausliefern.
Und ein Feature zu entwerfen, das von unheimlichen vielen Sprachen aus genutzt werden soll ist nicht so leicht, wie ein Feature zu entwickeln, dass nur von Java aus genutzt werden soll. Generizität kennen ja bereits sehr viele Sprachen, co- und contravariante generische Referenzen kennen wohl aber eher wenige. Deswegen wäre es wohl nicht ganz so klug soetwas einzubauen.
-
Helium schrieb:
Und ein Feature zu entwerfen, das von unheimlichen vielen Sprachen aus genutzt werden soll ist nicht so leicht [...] co- und contravariante generische Referenzen kennen wohl aber eher wenige. Deswegen wäre es wohl nicht ganz so klug soetwas einzubauen.
Das sehe ich anders. Dieses Feature kann völlig ohne Unterstützung der CLR implementiert werden, so wie es in Java auch geschehen ist. Das ist nicht zu verwechseln mit dass new T[] nicht geht, weil T in Java zur Laufzeit nicht mehr bekannt ist. Dafür bräuchte man freilich Unterstützung in der Laufzeitumgebung, aber doch nicht für solche Referenzen. Das sind ein paar Compiler-Tests, die in Java völlig unabhängig von der VM entwickelt werden konnten und es IMHO in C# auch werden könnten. Letztlich brauchst du sowieso für jede Sprache einen eigenen Compiler.
Für die Typsicherheit bei der Benutzung von Generics trägt ja der Compiler die Verantwortung, der CLR wird es wahrscheinlich egal sein, was sie dann ausführt, sowas wie <? extends Foo> muss es zur Laufzeit nicht mehr geben. Das ist ja kein konkreter Typ T, der zur Laufzeit bekannt sein muss um new T[] zu ermöglichen, das ist nur der statische Typ der Referenz.btw. Die Beta-Phase von Java 5.0 war unglaublich lang (über 2 Jahre oder sowas ?!). Java 5.0 hat also schon seit 3 Jahren jetzt Generics (über den Daumen gepeilt). Vor dieser Zeit ist gerade .Net 1.1 rausgekommen, ohne Generics. Ich glaube ehrlich gesagt nicht, dass Microsoft von selber darauf gekommen ist, Generics einzubauen. Wobei man ihnen natürlich lassen muss, dass schon ein paar feine eigene Sachen hinzugekommen sind, wie z.B. value types als Typparameter. Die Bereitschaft, die VM zu ändern ist IMHO lobenswert.
-
Natürlich könnte man es auch als C#-eigenes Feature implementieren, dass nicht von anderen Sprachen aus genutzt werden kann. 'out' wird ja auch nur vom Compiler verstanden. Er übersetzt es aber genau wie 'ref'.
Dann kann es aber nicht in der Signatur einer Methode vorkommen, die von anderen .Net-Sprachen aus genutzt werden soll.
-
Da hast du Recht, das hab ich leider nicht bedacht. Dabei ist ja gerade sowas schön, wenn man es in der Klassenbibliothek finden könnte (z.B. bei sort mit Comparator<? super T>).