Le proprietà automatiche sono basate sulle proprietà.
Le proprietà in C# sono una funzionalità linguistica, in Java sono una convenzione (i metodi che iniziano con get o set sono spesso considerati proprietà da persone che parlano del codice, ma per il compilatore non è diverso da foo o bar).
.NET e le lingue associate, in molti casi basate su COM (a volte nel seguente seme, a volte in modo deliberato non fare qualcosa in COM che era per qualche motivo o altro impopolare).
COM ha un concetto di proprietà che in VB era supportato da funzionalità di linguaggio (in C++ era supportato da convenzioni).
Versioni precedenti di VB, soprattutto in contesti in cui era utilizzato per fornire accesso programmatico di base a modelli di oggetti forniti da altrove, finalizzati a semplificare i modelli di oggetti presentati agli utenti per fare la distinzione tra un campo e un metodo che ottiene o set (magari con lavoro aggiuntivo, forse no) non importante (si consideri che mentre differiscono in qualche modo importante dall'esterno in .NET, l'accesso sintattico a una proprietà e un campo pubblico è lo stesso). Quando VB e COM (e prima di quell'OLE) sono cresciuti, sono cresciuti insieme.
Dunque in tutto, mentre C# condivide l'ereditarietà di C/C++ con Java, ha anche un'eredità che Java non condivide, il che ha fatto apparire le proprietà come una buona idea per i creatori di C#, ma non per Java.
Edit: In un primo momento ho detto:
Personalmente, penso che le proprietà automatiche sono davvero una soluzione a un difetto nella proprietà, piuttosto che un modo per semplificare il codice. Le proprietà "sembrano" sintatticamente come i campi pubblici, ma non sono interamente (prova a utilizzare DataBinder.Eval
per recuperare un campo). Se una proprietà fosse completamente pubblica e non avesse alcuna funzionalità aggiuntiva in getter o setter (come nel caso delle proprietà automatiche), preferirei semplicemente avere un campo pubblico (l'encapsulation non è argomento qui, poiché lo esponete completamente pubblicamente da- passa comunque), ma le differenze tra campi e proprietà funzionano contro questo.
ritiro questa dichiarazione. Rendere i campi esattamente come le proprietà richiederebbe che i campi di semplici strutture Plain-Old-Data agissero come proprietà, il che sarebbe una performance allentata. Concettualmente, mi piacerebbe che fossero più simili tra loro, ma ogni volta che ci penso (e sono passato dall'essere infastidito ad andare "oh aspetta" come qui più di una volta), è meglio così com'è.
Per quello che vale, dal momento che è Java, dovresti nominare i tuoi metodi getName, setName, ecc. Rende le proprietà configurabili nel designer in molti IDE Java. Per non parlare del fatto che se Java * * non ottiene mai le proprietà, ma garantisco che le specifiche saranno parte di esso al fine di rendere tutti i bean esistenti proprietà appena magicamente germogliate. – cHao
Anche per quello che vale, C# non ha avuto ** proprietà ** automatiche fino a (relativamente) di recente. –
Perché non è così. La domanda è fondamentalmente priva di significato. Dovresti chiedere ai progettisti di Java, o ai presenti product manager, o al Java Community Process, non a www.stackoverflow.com. – EJP