java vs .NET (ernsthaft) ;-)



  • ICh finde zwar, das Optimizer einige sinnlose Punkte aufzählt (wie oft hat man bitte 'Foo' und 'foo' in der öffentlichen Schnittstelle?), aber .Net hat auf jeden Fall seine schwächen. Die Generics hätten von Anfang an da sein müssen. Jetzt wird versucht die irgendwie da reinzuwurschteln, was aber nicht immer gelingt. Vor allem gibt es dadurch jetzt vieles unnötigerweise doppelt.



  • Es muss nicht public sein. Ich könnte ne protected Variable (ja ich weiß, hässlich, böse, lame) haben und dafür noch nen public getter.

    abstract class Base
    {
        public string Foo    {get{ return foo; }}    
    
        protected string foo = "oöusgdföklugsa";
    }
    
    class Derived : Base
    {
        public bool containsCharacter(char x)
        {
            return foo.IndexOf(x) != -1;	// Hmmmm, VB.
        }
    }
    

    Für C# wäre dieser Code völlig in Ordnung.

    Es ist auch nicht abwegig, Membervariablen und korrespondierende Getter so zu benennen. Ich mache das so. Meine Variablen sind natürlich nicht protected, trotzdem finde ich das Beispiel nicht völlig abwegig (hmmm könnt ja auch ne Methode/Proberty mit Rückgabewert wiederum sein). Wenn man für mehrere Sprachen compilieren will, muss man auf so was achten.

    An sich aber wirklich kein großer Punkt, es gibt schlimmere Dinge, wie das mit den Generics. Kapierst du eigentlich, warum man nicht bei Sprachen ohne Generics einfach Queue<Object> intern verwendet, anstatt eine
    System.Collections.Queue und eine System.Collections.Generics.Queue zu machen? Find ich sehr hässlich. In Java kann ich GenericClass<T> auch ohne Typparameter (implizit Object) verwenden.

    EDIT: Das soll natürlich nicht heißen, dass ich das für C# will. Aber man müsste es doch ermöglichen können, dass die CLR nicht-generischen Bytecode so interpretieren kann, dass sie intern Object einsetzt.


Anmelden zum Antworten