1 / 1 / 1
Регистрация: 22.11.2011
Сообщений: 16
1

Дилемы, возникающие по ходу изучения С#

26.03.2016, 22:02. Показов 660. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, иногда возникают вопросы на которые не могу найти ответа в книгах.

1. Какой смысл создавать свойства(они обеспечивают доступ до скрытых данных private)?, - если данные и поля с модификатором private доступны только внутри класса. А если мы создаем public конструктор, то private данные и так будут доступны внутри класса через открытый конструктор, без создания свойств или методов доступа.

2. Зачем использовать статические поля и методы?, - если вызов их только через имя класса, а мы, к примеру работаем с объектом. То есть вызвать через объект данное поле не сможем.

Спасибо, буду публиковать здесь вопросы и далее (нет у кого спросить).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2016, 22:02
Ответы с готовыми решениями:

Определить силы, возникающие в стержнях
Груз весом P=100кг поддерживается двумя стержнями АС и ВС. Определить силы в кг, возникающие в...

Символы и строки возникающие при использовании require_once
Приветствую Всех! Прошу помочь мне с одной проблемой, а именно: При присоединении файлов при...

Всплывающие окна в браузерах и возникающие ссылки в тексте
Началась беда с оперы. При попытки нажать на ссылку или куда-либо мышью периодически открывались...

Вызов деструктора и возникающие при этом чудеса
Здравствуйте все! Начал разработку своего класса и после непродолжительного времени разработки...

5
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
26.03.2016, 22:20 2
Цитата Сообщение от light9300 Посмотреть сообщение
То есть вызвать через объект данное поле не сможем.
И что с того? Зато сможем по имени класса... Зачем? Да хотя бы, если нужно что-то сделать до создания экземпляра. Или изменить какое-то свойство общее для всех экземпляров.

По поводу первого... По-моему здесь уже много раз всё это обсуждалось... Зачем нужна вообще структура языку, зачеммыставимпробелымеждусловами? Конструктор открыт (хотя бывают и закрытые конструкторы) как раз для того, чтобы создать объект и инициализировать свои поля - он имеет на это право. В конструкторе довольно часто инициализируются не поля, а свойства, потому что они удобны, например, для обработки исключений. И т.д. и т.п. - всё в литературе.
1
22 / 22 / 13
Регистрация: 11.08.2015
Сообщений: 69
26.03.2016, 22:26 3
1. https://msdn.microsoft.com/ru-... s7x04.aspx

2. https://msdn.microsoft.com/ru-... 35949.aspx
1
6203 / 2454 / 718
Регистрация: 11.04.2015
Сообщений: 3,968
Записей в блоге: 43
26.03.2016, 23:33 4
Цитата Сообщение от light9300 Посмотреть сообщение
Какой смысл создавать свойства
В акцессорах свойств можно выполнить дополнительные действия. Среди стандартных действий такие как: проверка корректности вводимых данных в сеттере и по результатам проверки значение может быть скорректировано, не присвоено если не корректно или, например, вызвано исключение; иногда надо уведомлять другие объекты об изменении значения свойства, тогда инициируются соответствующие события; если свойство имеет отношение к объектам пользовательского интерфейса, то после присвоения нового значения объект надо перерисовать; в геттерах нередко проверяется наличие объекта в переменной и если его нет, то он создается. Собственно это только наиболее часто встречающиеся примеры, а так вариантов может быть сколько угодно.
Но тут возникает вполне закономерный вопрос: а зачем создавать свойства в случаях, когда все это не делается, а акцессоры реализованы стандартно, мало того для этих случаев даже автоматически реализованные свойства придумали. Ответ прост. Когда пишется код, никогда заранее нельзя знать, как изменится задача. Просто когда выяснится, что при обращении к полю надо выполнять какие-то действия, может оказаться, что к тому времени уже написана куча кода, который обращается к этому полю. Таким образом, использование свойств - более безопасный метод, чем непосредственное обращение к полю.
Цитата Сообщение от light9300 Посмотреть сообщение
Зачем использовать статические поля и методы?, - если вызов их только через имя класса, а мы, к примеру работаем с объектом.
А если, к примеру, создавать экземпляр бессмысленно? Что, к примеру, может дать создание экземпляра класса типа System.Math? А еще это могут быть фабричные методы, которые как раз-таки и создают экземпляры. А иногда методы к экземплярам вообще имеют только логическое отношение, то есть они не обращаются к экземпляру или его членам, но каким-то образом связаны с классом, а стало быть их там просто легче найти. Для примера можно взять System.Xml.XmlReader.IsName(string). Метод просто проверяет строку на предмет того, является ли она корректным XML-именем, да ридер этот метод использует, только для использования этого метода экземпляр ридера не нужен. И если тебе понадобится выполнить такую проверку, то создавать экземпляр ридера не придется. А для того чтобы ассоциироваться с определенным классом ( я имею в виду класс, в котором он определен) могут быть разные причины: он в этом классе используется, он связан с ним логически и там его проще найти, он обрабатывает экземпляры класса и ему может потребоваться доступ к приватным членам.
1
Администратор
Эксперт .NET
15596 / 12565 / 4989
Регистрация: 17.03.2014
Сообщений: 25,511
Записей в блоге: 1
27.03.2016, 07:38 5
Цитата Сообщение от light9300 Посмотреть сообщение
Спасибо, буду публиковать здесь вопросы и далее (нет у кого спросить).
 Комментарий модератора 
Не надо так делать. Одна тема - один вопрос (правила п4.4).
0
5139 / 2752 / 464
Регистрация: 05.10.2013
Сообщений: 7,269
Записей в блоге: 143
27.03.2016, 17:27 6
Цитата Сообщение от light9300 Посмотреть сообщение
Какой смысл создавать свойства
Добавлю, что можно создавать свойства только для чтения или только за запись

Пример свойства на чтение:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    public class TileMap : MonoBehaviour
    {
        // ...
        public int tileID = 0;
        // ...
 
        public Sprite currentTileBrush
        {
            get { return spriteReferences[tileID] as Sprite; }
        }
 
        // ...
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2016, 17:27
Помогаю со студенческими работами здесь

Убрать артефакты возникающие при отключении аппаратного ускорения
Возникла необходимость выставить значение <application ...

Событие, возникающие когда контролы расположились на форме в отрисованном окне
Когда все контролы инициализированы возникает событие Loaded. private void Window_Loaded(object...

Возникновение странных погрешностей около нуля и возникающие из-за нее косяки
Всем привет! Сразу к делу, тренирую свое генетический алгоритм на тестовых функциях. Одна из них -...

Постоянная работа с xml-файлом настроек программы и возникающие ошибки
Всем привет. У меня в моей программе реализовано хранение настроек в xml-файле. Я сделал...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru