C# - Eine Mischung aus Java und C++?
-
Firefighter schrieb:
C# hat alle guten Eigenschaften von C++ (...)
Das ist ja wohl der grösste Unfug von überhaupt.
Die IMO grössten Stärken von C++ gibt es in C# nicht: Templates und automatische deterministische Finalisierung.
Eine Sprache die beides nicht beherrscht hat IMO mit C++ - praktisch betrachtet - nicht viel zu tun.
-
@hustbaer. Gut ok das ist ein Argument, dafür wurden die statischen Templates durch Dynamische Generics "abgelös" und ich fand das hat C++ schon immer gefehlt.
-
Es ist doch auch völlig Wurst, Leute lasst uns Weihnachten genießen und nich shcon wieder ne Grundsatzdiskussion anfangen. Gibt Sachen die hats aus C++,C und Java, fertig ist der Lack. Wer wissen will was alles anderes ist, soll sich halt mit den Sprachen beschäftigen. Immer diese Krümelkackerei hier im Forum.
-
volkard schrieb:
Firefighter schrieb:
Also mir fallen da Properties(gut die sind intern auch nur methoden, aber eben so gibts die nicht) ein, events,delegates sind erst spät dazu gekommen. Hmm und mehr fällt mir aktuell auch nicht ein :p
Ich hätte Features ausschließen sollen, die nicht reiner syntaktischer Zucker sind.
Es ist alles nur syntaktischer Zucker. Das Problem mit C# ist, dass es zu viel Zuckerguss ist, man bekommt sehr leicht Karies.
-
Tja das kommt davon wenn man nicht fähig ist den Zucker richtig anzuwenden
-
Ich wollte konkrete Sprachfeatures hören, die einem erfahrenen Programmierer was bringen. Also genau sowas wie "Linq, Lambda und Extensionmethodes" wollte ich hören und da sehe ich gar keinen Bedarf an einer Grundsatzdiskussion.
-
Ok gut, danke
Dann haben wir ja genau diese Features aufgezählt.
-
Firefighter schrieb:
@hustbaer. Gut ok das ist ein Argument, dafür wurden die statischen Templates durch Dynamische Generics "abgelös" und ich fand das hat C++ schon immer gefehlt.
Das was man mit Generics machen kann, deckt nur einen ziemlich kleinen Bereich dessen ab, was man mit Templates machen kann.
Templates wurden also sicher nicht abgelöst, sondern es wurde ein - zugegebenermassen sehr willkommener - Ersatz, für einen kleinen Teil dessen geschaffen, was in C++ mit Templates gemacht werden kann.
-
volkard schrieb:
Ich wollte konkrete Sprachfeatures hören, die einem erfahrenen Programmierer was bringen.
Also ich zähle mich zu den erfahrenen Programmierern und mir bringen Properties etwas...
-
@hustbaer: Schöne Weihnachten noch nachträglich
Gut dann werde ich wohl nicht alle Features kennen die man mit Generics nicht machen kann, mit Templates aber. Eventuell könntest du ne kleine gegenüberstellung machen was alles machbar ist. Sicher bin ich mir das man mit Templates zur Laufzeit keine "neuen Templates" erstellen kann, was in C# ja geht. Aber mehr fällt mir auf anhieb auch nicht ein.
-
loks schrieb:
volkard schrieb:
Ich wollte konkrete Sprachfeatures hören, die einem erfahrenen Programmierer was bringen.
Also ich zähle mich zu den erfahrenen Programmierern und mir bringen Properties etwas...
Sicher, Du mußt weniger () schreiben.
-
nicht nur das
entweder
class Person { private int _age; public int GetAge() { return _age; } public void SetAge(int age) { _age = age; } }
oder
class Person { public int Age { get; set; } }
auch die benutzung ist intuitiver
person.Name " is " person.Age + " years old"
ist einfach besser als
person.GetName() " is " person.GetAge() + " years old"
Name und Alter ist ja auch wirklich eine eigenschaft einer person
int age = person.Age; person.Age = age;
find ich einfach angenehmer zu lesen
nicht zu vergessen das itialisieren ohne ctor
var person = new Person { Name = "Achim", Age = 72 };
ohne properties muesste man entweder ein ctor erstellen der alle properties annimmt (und auch alle moeglichen konstellationen) oder man muss es erstellen und dann einzeln die Set*** aufrufen
ohne properties ist schrecklich
properties sind die eigenschaften eines objektes - so wie die farbe eines autos - und eigenschaften sind etwas welche man nicht mit "Get***" abfragen mussColor carColor = myCar.Color;
(man kann zudem get und set in seiner sichtbarkeit [public, private, protected] beschraenken)
gerade erfahrene programmierer finden die properties am sinnvollsten
//typo
-
volkard schrieb:
loks schrieb:
volkard schrieb:
Ich wollte konkrete Sprachfeatures hören, die einem erfahrenen Programmierer was bringen.
Also ich zähle mich zu den erfahrenen Programmierern und mir bringen Properties etwas...
Sicher, Du mußt weniger () schreiben.
Die Syntax von Properties in C# ist aber schlecht, viel zu viel Schreibarbeit. Wieso Properties nicht einfach wie in Groovy automatisch erzeugt werden, ist mir ein Rätsel.
Für die, die Groovy nicht kennen:
Wenn du ein Attribut hast, kannst du direktfoo.xx = 5;
schreiben. Später im Code kannst du dann einegetXx()
undsetXx()
einfügen. Der Code bleibtfoo.xx = 5;
, aber nun wird die get/set Methode aufgerufen.
http://groovy.codehaus.org/Groovy+BeansAnsonsten, dank diesen Properties muss man jede Methode nun großschreiben, damit man Properties von öffentlichen Attributen unterscheiden kann. Irgendwie stört mich das extrem in C#.
-
Hallo
DEvent schrieb:
Die Syntax von Properties in C# ist aber schlecht, viel zu viel Schreibarbeit.
string Name {get; set;}
ist dir zuviel Schreibarbeit?
chrische
-
@chrische5:
Geh gar nicht erst auf DEvents geschriebenes ein, der findet sowieso immer und immer wieder was, was an C# und Microsoft schlecht ist.
-
Hallo
Ist mir schon klar, aber das ist ja nun wirklich mal kurz.
chrische
-
DEvent ist wahrscheinlich noch bei C# 1.x (und .NET 1.1) hängengeblieben - und dort war wirklich noch einiges Krampf (z.B. Eventzuweisungen, ArrayList, Codeduplikationen wegen fehlenden Generics, ...).
Bzgl. Generics und Templates:
was leider noch nicht in C# funktioniert ist die generische Benutzung von Operatoren...Und was man alles mittels Relection anstellen kann, läßt sich gar nicht in ein paar Sätzen aufzählen!
-
DEvent schrieb:
Die Syntax von Properties in C# ist aber schlecht, viel zu viel Schreibarbeit. Wieso Properties nicht einfach wie in Groovy automatisch erzeugt werden, ist mir ein Rätsel.
string Name {get; set;}
ja - verdammt lang -.-DEvent schrieb:
Für die, die Groovy nicht kennen:
Wenn du ein Attribut hast, kannst du direktfoo.xx = 5;
schreiben. Später im Code kannst du dann einegetXx()
undsetXx()
einfügen. Der Code bleibtfoo.xx = 5;
, aber nun wird die get/set Methode aufgerufen.
http://groovy.codehaus.org/Groovy+Beanswo ist der vorteil ? man kann die get und set properties auch noch veraendern
public string Name { get { // do something return _name; } set { // do something _name = value; } }
ist auch kuerzer als noch zusaetzliche get und set methoden zu brauchen
DEvent schrieb:
Ansonsten, dank diesen Properties muss man jede Methode nun großschreiben, damit man Properties von öffentlichen Attributen unterscheiden kann. Irgendwie stört mich das extrem in C#.
du arbeitest mit oeffentlichen variablen? schaem dich!
zudem gibts ja auch die einschraenkungen
public string Name { get; private set; }und man kann jeden get und set in diesem propertie noch mit custom code versehen (siehe oben) - das geht bei automatisch generierten code nicht [so einfach]
-
Man muß das mal so sehen. Wenn man bei einem neuen Sprachfeature die Vorteile nicht erkennen kann, gibt es zwei Theorien:
- Man ist unfähig die Vorteile zu erkennen.
- Das Feature hat keine Vorteile.
Für einige Programmierer scheidet Ansatz 1 grundsätzlich aus, weil Sie die eigene Unfähigkeit nicht akzeptieren können. Für diese Gruppe gilt: Wenn Ich keine Vorteile erkennen kann, dann gibt es keine.
Gute Entwickler akzeptieren zumindest das Fall 1 möglich ist und schlußfolgern daher: Auch wenn ich keine Vorteile erkenne so kann es diese trotzdem geben.
-
hustbaer schrieb:
Die IMO grössten Stärken von C++ gibt es in C# nicht: ... automatische deterministische Finalisierung.
Kann der C++-Destruktor denn mehr als die C# using...dispose-Variante?