Автоматические свойства основаны на свойствах.
Свойства на C# - это языковая функция, в Java это соглашение (методы, начинающиеся с get или set, часто считаются свойствами людей, говорящих о коде, но для компилятора они не отличаются от foo или bar).
.NET и связанные с ним языки, где по-разному основаны на COM (иногда в следующем костюме, иногда умышленно не что-то делает в COM, который был по какой-то причине непопулярным).
COM имеет концепцию свойств, которая в VB была поддержана языковыми функциями (в C++ она была поддержана соглашениями).
Ранние версии VB, особенно в тех контекстах, где он использовался для обеспечения базового программного доступа к объектным моделям, предоставленным в другом месте, с целью упрощения моделей объектов, представленных пользователям, для проведения различия между полем и методом, который получает или (возможно, с дополнительной работой, возможно, неважно) неважно (учтите, что, хотя они отличаются каким-то важным способом извне в .NET, синтаксический доступ к свойству и публичному полю одинаковый). Когда VB и COM (и до этого OLE) выросли, они выросли вместе.
Таким образом, в то время как C# имеет наследование C/C++ с Java, он также имеет наследование, которое Java не разделяет, что делает свойства, по-видимому, хорошей идеей для создателей C#, но не для Java.
Edit: Сначала я сказал:
Лично я считаю, автоматические свойства действительно Обойти изъян в свойствах, а не способ упростить код. Свойства «выглядят» как публичные поля синтаксически, но не полностью (попробуйте использовать DataBinder.Eval
для извлечения поля). Если свойство было полностью публичным и не имело дополнительных функций в getter или setter (что имеет место с автоматическими свойствами), я бы предпочел бы просто публичное поле (инкапсуляция не является аргументом здесь, поскольку полностью раскрывает его публично, это все равно), но различия между полями и свойствами работают против этого.
Я отменяю это заявление. Создание полей точно так же, как и свойств, потребует, чтобы поля простых структур Plain-Old-Data действовали как свойства, что было бы неплохим. Понятно, что я бы хотел, чтобы они были больше похожи друг на друга, но всякий раз, когда я думаю об этом (и я ушел от того, что меня раздражало, что «о, подождите», как здесь, не раз), это лучше, чем есть.
Для чего это стоит, так как это Java, вы должны называть свои методы getName, setName и т. Д. Делает свойства, которые можно установить в дизайнере во многих Java-IDE. Не говоря уже о том, что, если Java когда-либо * делает * получать свойства, я все же гарантирую, что указанные спецификации будут частью этого, чтобы сделать все эти существующие бобы просто волшебными свойствами прорастания. – cHao
Также для того, что стоит, у C# не было ** автоматического ** свойств до (относительно) в последнее время. –
Потому что это не так. Вопрос в основном бессмыслен. Вам нужно будет спросить дизайнеров Java или настоящих менеджеров продуктов или процесса сообщества Java, а не www.stackoverflow.com. – EJP