Automatische Eigenschaften basieren auf Eigenschaften.
Eigenschaften in C# sind ein Sprachfeature, in Java sind sie eine Konvention (Methoden, die mit get oder set beginnen, werden oft als Eigenschaften von Leuten betrachtet, die über den Code sprechen, aber für den Compiler nicht anders als foo oder bar).
.NET und die zugehörigen Sprachen, wo in vielerlei Hinsicht auf COM basiert (manchmal in Folge Anzug, manchmal in absichtlich nicht etwas in COM, das aus irgendeinem Grund oder anderen unpopulär war).
COM hat ein Konzept von Eigenschaften, die in VB durch Sprachfeatures unterstützt wurden (in C++ wurde es von Konventionen unterstützt).
Frühere Versionen von VB, insbesondere in Kontexten, in denen es grundlegenden programmatischen Zugriff auf Objektmodelle von anderswo lieferte, sollten die Objektmodelle vereinfachen, die den Benutzern zur Unterscheidung zwischen einem Feld und einer Methode zur Verfügung gestellt werden Sätze (vielleicht mit zusätzlicher Arbeit, vielleicht nicht) unwichtig (bedenken Sie, dass, während sie sich in einer wichtigen Weise von außen in .NET unterscheiden, der syntaktische Zugriff auf eine Eigenschaft und ein öffentliches Feld derselbe ist). Als VB und COM (und davor OLE) aufwuchsen, sind sie zusammen aufgewachsen.
Also, während C# eine C/C++ - Vererbung mit Java teilt, hat es auch eine Vererbung, die Java nicht teilt, was Eigenschaften wie eine gute Idee für C# 's Schöpfer, aber nicht für Java macht.
Edit: Zuerst sagte ich:
Ich persönlich denke, automatische Eigenschaften sind wirklich eine Abhilfe zu einem Fehler in Eigenschaften, anstatt ein Weg, um Ihren Code zu vereinfachen. Eigenschaften "sehen" wie öffentliche Felder syntaktisch aus, sind aber nicht vollständig (versuchen Sie es mit DataBinder.Eval
, um ein Feld abzurufen). Wenn eine Eigenschaft sowohl vollständig öffentlich ist, als auch keine zusätzliche Funktionalität in Getter oder Setter hat (was bei automatischen Eigenschaften der Fall ist), würde ich lieber ein öffentliches Feld haben (Kapselung ist hier kein Argument, wie es vollständig öffentlich verfügbar macht- passiert das sowieso), aber die Unterschiede zwischen Feldern und Eigenschaften wirken dagegen.
Ich ziehe diese Aussage zurück. Wenn Felder genau wie Eigenschaften erstellt werden, müssten die Felder einfacher Plain-Old-Data-Strukturen wie Eigenschaften agieren, was eine Performance-Loose wäre. Konzeptuell möchte ich, dass sie einander ähnlicher sind, aber wann immer ich darüber nachdenke (und ich bin genervt davon geworden, "Oh, warte" wie hier, mehr als einmal), es ist besser so wie es ist.
Für was es wert ist, da es Java ist, sollten Sie Ihre Methoden getName, setName, etc. nennen. Macht die Eigenschaften im Designer in vielen Java IDEs einstellbar. Ganz zu schweigen davon, wenn Java überhaupt * Eigenschaften erhält, garantiere ich, dass diese Spezifikationen Teil davon sind, um all diese existierenden Beans einfach magisch zu sprießen. – cHao
Auch für das, was es wert ist, hatte C# bis zuletzt (relativ) keine ** automatischen ** Eigenschaften. –
Weil es nicht geht. Die Frage ist im Grunde bedeutungslos. Sie müssten die Designer von Java oder die aktuellen Produktmanager oder den Java Community-Prozess, nicht www.stackoverflow.com fragen. – EJP