Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/35: Рейтинг темы: голосов - 35, средняя оценка - 4.71
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
1

Зачем в C# существуют публичные поля?

21.03.2013, 17:13. Показов 7091. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сабж. Собстваенно зачем, если по всевозможным рекомендациям советуют делать автосвойство
Auto-properties should be used whenever you don’t need any custom logic in the property getter or setter. This approach might seem unnecessary compared to just exposing the field itself, but by requiring clients to access data through a property now, you can later add custom logic in front of the data access without requiring a breaking change. That is, changing the auto-property to a regular one with custom logic.
Приватные поля я еще могу понять зачем, из вопросов производительности, а вот публичные в проектах ни разу не видел. Так зачем же мучаться, пусть компилятор запись
C#
1
public int X;
автоматически считает авто-свойством, так как такие вот записи (по крайней мере в моих решениях) утомляют:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace SingleParameterOptimization
{
    public class StepData
    {
        public double A { get; private set; }
        public double B { get; private set; }
        public double Lambda { get; private set; }
        public double Mu { get; private set; }
        public double FLambda { get; private set; }
        public double FMu { get; private set; }
 
        public StepData(double a, double b, double left, double right, double functionleft, double functionright)
        {
            A = a;
            B = b;
            Lambda = left;
            Mu = right;
            FLambda = functionleft;
            FMu = functionright;
        }
    }
}
Можно было бы сделать read-only поля, но из соображений привязки в WPF было сделано так.
Если можно было бы автоматически сделать из этого свойства можно было бы написать что-нибудь в духе
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace SingleParameterOptimization
{
    public class StepData
    {
        public double A,B,Lambda,Mu,FLambda,FMu { get; private set; }
 
        public StepData(double a, double b, double left, double right, double functionleft, double functionright)
        {
            A = a;
            B = b;
            Lambda = left;
            Mu = right;
            FLambda = functionleft;
            FMu = functionright;
        }
    }
}
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2013, 17:13
Ответы с готовыми решениями:

Публичные поля
Добрый день, в книгах, статьях, от преподавателей и т.п. я слышал что в шарпе мы не используем...

Зачем использовать поля, если есть свойства?
Приветствую. Объясните новичку: для чего нужно использовать поля, если есть такая штука, как...

Зачем в C++ существуют неконстантные итераторы?
Зачем в C++ существуют неконстантные итераторы? Почему было позволено изменять коллекции во время...

Зачем существуют проекции фигур на плоскость?
Здравствуйте! Такой чисто философский вопрос, вот в теории сказано что , я вот все не могу понять...

17
Эксперт Java
 Аватар для turbanoff
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
21.03.2013, 17:20 2
Вопрос кончено философский. Если запретить публичные поля, что делать с приватными/protected/internal? Придумывать новый синтаксис?
Ну, и один из возможных ответов на ваш вопрос: потому что публичные поля есть в java. По этой же причине, например, в c# с первых версий поддерживается вариативность массивов.
1
Заблокирован
21.03.2013, 17:31 3
Учите предметную область.
Открытые поля допускается использовать в простых значимых типах.
Например, Point{ public int x; public int y } -зачем мне делать лишнюю работу (создавать 2 переменных и два свойства к ним, если мне нужно всего лишь хранить два числа вместе (автоматические свойства создают скрытую переменную).
Открытые поля допускается использовать в качестве констант.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.03.2013, 18:28  [ТС] 4
Цитата Сообщение от turbanoff Посмотреть сообщение
По этой же причине, например, в c# с первых версий поддерживается вариативность массивов.
? Вариативность?
Urety, ну так для вызывающего кода нет разницы между полем и свойством, к тому же были тесты, в некоторых случаях в структурах доступ через геттеры и сеттеры получается быстрее, чем доступ к открытому полю (парадокс, но факт).
Константы - единственный случай, можно оставить константные поля как единственный вид открытых полей. То есть
C#
1
2
public const int X = 5 // открытое константное поле
public int Y; // открытое авто-свойство
0
Эксперт Java
 Аватар для turbanoff
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
21.03.2013, 18:31 5
Цитата Сообщение от Psilon Посмотреть сообщение
? Вариативность?
C#
1
2
string[] arr = new string[] {"12", "13"};
object[] objectArray = arr;
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.03.2013, 19:36  [ТС] 6
turbanoff, не думаю, что что-то добавляли в C# только потому что это что-то есть в Java
Так вопрос остается открытым)) Достаточно было бы немного привыкнуть (как и к get;set, зато объем кода бы уменьшился.. Имхо
0
Эксперт Java
 Аватар для turbanoff
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
21.03.2013, 19:43 7
Psilon, Пост разработчика языка c# - http://blogs.msdn.com/b/ericli... iance.aspx
Unfortunately, this particular kind of covariance is broken. It was added to the CLR because Java requires it and the CLR designers wanted to be able to support Java-like languages. We then up and added it to C# because it was in the CLR. This decision was quite controversial at the time and I am not very happy about it, but there’s nothing we can do about it now.
0
 Аватар для IamRain
3685 / 2596 / 719
Регистрация: 02.08.2011
Сообщений: 6,979
21.03.2013, 20:11 8
Встречный вопрос Зачем перед каждый членом в шарпе нужно писать модификатор, если можно было бы оставить так же, как в С++? Один модификатор на одну группу членов. Тоже ведь тратит время на написание.

Добавлено через 8 минут
Цитата Сообщение от Psilon Посмотреть сообщение
утомляют
Для этого есть Code Snippets.

Добавлено через 8 минут
Та часть, которая требует тупой ручной работы - неплохо автоматизируется благодаря разработчикам Microsoft.
Так что не думаю, что это должно быть проблемой. Скоро пойдут такие заявления: "А почему я не могу вбивать и билдить код для целевой платформы .NET 3.5 сборкой голосового управления компилятором версии 2.0 ?. Исправьте, пожалуйста."
0
 Аватар для Sp1tfire
76 / 66 / 1
Регистрация: 10.12.2011
Сообщений: 175
21.03.2013, 20:31 9
Цитата Сообщение от Psilon Посмотреть сообщение
...к тому же были тесты, в некоторых случаях в структурах доступ через геттеры и сеттеры получается быстрее, чем доступ к открытому полю (парадокс, но факт)...
wtf?
Изображения
 
0
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
21.03.2013, 20:31 10
Цитата Сообщение от IamRain Посмотреть сообщение
Встречный вопрос Зачем перед каждый членом в шарпе нужно писать модификатор, если можно было бы оставить так же, как в С++? Один модификатор на одну группу членов. Тоже ведь тратит время на написание.
На вкус и цвет синтаксиса нет
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.03.2013, 20:36  [ТС] 11
IamRain,
Встречный вопрос Зачем перед каждый членом в шарпе нужно писать модификатор, если можно было бы оставить так же, как в С++? Один модификатор на одну группу членов. Тоже ведь тратит время на написание.
хз, мне как раз удобней каждый член отдельно....
Для этого есть Code Snippets.
и? сгенрировать код автоматически можно, а вот автоматически читать пока не научились )

Добавлено через 1 минуту
Sp1tfire, Что лучше, свойства с приватной переменной или автоматические свойства?
0
Заблокирован
21.03.2013, 21:50 12
Цитата Сообщение от Psilon Посмотреть сообщение
? Вариативность?
Urety, ну так для вызывающего кода нет разницы между полем и свойством, к тому же были тесты, в некоторых случаях в структурах доступ через геттеры и сеттеры получается быстрее, чем доступ к открытому полю (парадокс, но факт).
Константы - единственный случай, можно оставить константные поля как единственный вид открытых полей. То есть
C#
1
2
public const int X = 5 // открытое константное поле
public int Y; // открытое авто-свойство
Можно было бы сделать, все как есть, внутри класса, но снаружи только через свойства. Думаю вполне можно сделать было бы, но, что делать с тоннами написанного кода? Переписывать? нет лучше оставить для совместимости и рекомендовать использовать свойства в подобных рекомендациях.
1
Эксперт .NET
 Аватар для kolorotur
17794 / 12945 / 3381
Регистрация: 17.09.2011
Сообщений: 21,229
21.03.2013, 23:46 13
Цитата Сообщение от Psilon Посмотреть сообщение
Собстваенно зачем, если по всевозможным рекомендациям советуют делать автосвойство
1. Рекомендации — это всего лишь рекомендации, а не руководство к действию.
2. При работе с вложенными классами.
3. Для работы в небезопасном контексте и интеропе.

Цитата Сообщение от Psilon Посмотреть сообщение
а вот публичные в проектах ни разу не видел.
А много проектов видели?
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
22.03.2013, 00:01 14
Psilon, в идеале не должны юзатся автопроперти.
Инкапсуляция +
логика проверки гет\сет +
упрощенный синтаксис.

Никто не мешает ишачить методы вместо полей. (то бишь, методы вместо методов)

Lippert - Aut-ExplProp
Why No Extension Properties?
Reason to use private properties

еще раз напомните о тестах проп\филд, так как мне кажется,что грузить в стек элементы функции и просто элементы - заметно различимые действия.

Добавлено через 1 минуту
Забыл)
Пол .Нета стоит на привязке данных и свойствах
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
22.03.2013, 06:59  [ТС] 15
Цитата Сообщение от kolorotur Посмотреть сообщение
А много проектов видели?
поменьше вашего

Цитата Сообщение от Noob.net Посмотреть сообщение
Пол .Нета стоит на привязке данных и свойствах
вот-вот, получается, даже для простейших классов нужно юзать свойства, для возможности последующих привязок
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
22.03.2013, 22:54 16
Psilon, Я рассматриваю их как урезанные методы) меня устраивает.
я бы назвал это особенностью языка,а не лишней частью

Иди в опенсорс на какой-то проект - там тоже подучишь.
0
54 / 53 / 5
Регистрация: 14.08.2012
Сообщений: 252
24.03.2013, 02:09 17
Бывают случаи, когда класс должен быть похожим на структуру, тогда проще использовать публичные поля для его инициализации. Конечно, желательно, чтобы такой класс был внутренним для проекта.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
24.03.2013, 03:08  [ТС] 18
AceOfSpades, например? Мне казалось, что сейчас все кому не лень используют биндинги, а там без свойств никуда...
0
24.03.2013, 03:08
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.03.2013, 03:08
Помогаю со студенческими работами здесь

Какие существуют методы анализа текстов? Имеется список литературы, например, причем поля могут быть не обязательно в одном порядке...
Например, мы знаем только, что там имеется обязательно автор, год издания, издательство. но могут...

Битовые поля структур: что такое и зачем они нужны?
Собственно, вопрос в заголовке. Читал Шилдта, но там эта тема довольно расплывчата. Надеюсь,...

Зачем нужны катушки Гельмгольца при измерении магнитного поля земли
Есть лаборатная работа, измерение составляющих магнитного поля земли методом наложения внешнего...

Публичные проекты. Junior C++
Здравствуйте! Очень интересует вопрос: Насколько важно и необходимо для устройства на позицию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Как клонировать определенную ветку в Git
bytestream 24.01.2025
Одной из ключевых функций Git является возможность клонирования веток, что позволяет создавать локальные копии удаленных репозиториев и работать с определенными версиями проекта. Этот механизм. . .
Как в цикле обойти строки DataFrame в Pandas Python
bytestream 24.01.2025
DataFrame представляет собой одну из основных структур данных в библиотеке Python Pandas, которая организует информацию в виде двумерной таблицы с строками и столбцами. Эта структура данных особенно. . .
Как получить имя текущей ветки в Git
bytestream 24.01.2025
При работе с Git часто возникает необходимость определить имя текущей ветки, в которой ведется разработка. Знание текущей ветки является критически важным аспектом для эффективного управления. . .
Как отсортировать массив объектов по значению поля объекта в JavaScript
bytestream 24.01.2025
При разработке веб-приложений на JavaScript разработчики часто сталкиваются с необходимостью работать с массивами объектов. Эти структуры данных представляют собой упорядоченные наборы элементов, где. . .
Ошибка "src refspec master does not match any" при пуше коммита в Git
bytestream 24.01.2025
При работе с системой контроля версий Git разработчики нередко сталкиваются с различными ошибками, одной из которых является сообщение "src refspec master does not match any". Эта ошибка возникает. . .
Как округлить не более двух цифр после запятой в JavaScript
bytestream 24.01.2025
При работе с числами в JavaScript разработчики часто сталкиваются с необходимостью округления десятичных значений до определенного количества знаков после запятой. Это особенно важно при работе с. . .
Как сделать UPDATE из SELECT в SQL Server
hw_wired 24.01.2025
В современных системах управления базами данных операции обновления и выборки данных являются фундаментальными инструментами для работы с информацией. SQL Server предоставляет мощные команды UPDATE и. . .
Как вставить элемент в массив на указанный индекс в JavaScript
hw_wired 24.01.2025
Массивы являются одной из фундаментальных структур данных в JavaScript, предоставляющей разработчикам мощный инструмент для хранения и управления упорядоченными наборами данных. Они позволяют хранить. . .
Чем отличаются HashMap и Hashtable в Java
hw_wired 24.01.2025
В мире разработки на Java существует множество инструментов для работы с коллекциями данных, и среди них особое место занимают структуры данных для хранения пар ключ-значение. HashMap и Hashtable. . .
Как конвертировать видео в GIF
hw_wired 24.01.2025
В современном мире анимированные изображения стали неотъемлемой частью цифровой коммуникации. Формат GIF (Graphics Interchange Format) представляет собой особый тип файлов, который позволяет. . .
Как скопировать текст в буфер обмена на JavaScript во всех браузерах
hw_wired 24.01.2025
Копирование текста в буфер обмена стало неотъемлемой частью современных веб-приложений, значительно улучшающей пользовательский опыт и упрощающей работу с контентом. В эпоху активного обмена. . .
Как скрыть клавиатуру на Android
hw_wired 24.01.2025
При разработке Android-приложений часто возникает необходимость управлять видимостью экранной клавиатуры для улучшения пользовательского опыта. Одним из наиболее эффективных способов контроля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru