1 / 1 / 1
Регистрация: 22.11.2011
Сообщений: 16
|
|
1 | |
Дилемы, возникающие по ходу изучения С#26.03.2016, 22:02. Показов 660. Ответов 5
Метки нет Все метки)
(
Здравствуйте, иногда возникают вопросы на которые не могу найти ответа в книгах.
1. Какой смысл создавать свойства(они обеспечивают доступ до скрытых данных private)?, - если данные и поля с модификатором private доступны только внутри класса. А если мы создаем public конструктор, то private данные и так будут доступны внутри класса через открытый конструктор, без создания свойств или методов доступа. 2. Зачем использовать статические поля и методы?, - если вызов их только через имя класса, а мы, к примеру работаем с объектом. То есть вызвать через объект данное поле не сможем. Спасибо, буду публиковать здесь вопросы и далее (нет у кого спросить). ![]()
0
|
|
26.03.2016, 22:02 | |
Ответы с готовыми решениями:
5
Определить силы, возникающие в стержнях
Всплывающие окна в браузерах и возникающие ссылки в тексте
|
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
|
|
26.03.2016, 22:20 | 2 |
И что с того? Зато сможем по имени класса... Зачем? Да хотя бы, если нужно что-то сделать до создания экземпляра. Или изменить какое-то свойство общее для всех экземпляров.
По поводу первого... По-моему здесь уже много раз всё это обсуждалось... Зачем нужна вообще структура языку, зачеммыставимпробелымеждусловами? Конструктор открыт (хотя бывают и закрытые конструкторы) как раз для того, чтобы создать объект и инициализировать свои поля - он имеет на это право. В конструкторе довольно часто инициализируются не поля, а свойства, потому что они удобны, например, для обработки исключений. И т.д. и т.п. - всё в литературе.
1
|
22 / 22 / 13
Регистрация: 11.08.2015
Сообщений: 69
|
|
26.03.2016, 22:26 | 3 |
1
|
26.03.2016, 23:33 | 4 |
В акцессорах свойств можно выполнить дополнительные действия. Среди стандартных действий такие как: проверка корректности вводимых данных в сеттере и по результатам проверки значение может быть скорректировано, не присвоено если не корректно или, например, вызвано исключение; иногда надо уведомлять другие объекты об изменении значения свойства, тогда инициируются соответствующие события; если свойство имеет отношение к объектам пользовательского интерфейса, то после присвоения нового значения объект надо перерисовать; в геттерах нередко проверяется наличие объекта в переменной и если его нет, то он создается. Собственно это только наиболее часто встречающиеся примеры, а так вариантов может быть сколько угодно.
Но тут возникает вполне закономерный вопрос: а зачем создавать свойства в случаях, когда все это не делается, а акцессоры реализованы стандартно, мало того для этих случаев даже автоматически реализованные свойства придумали. Ответ прост. Когда пишется код, никогда заранее нельзя знать, как изменится задача. Просто когда выяснится, что при обращении к полю надо выполнять какие-то действия, может оказаться, что к тому времени уже написана куча кода, который обращается к этому полю. Таким образом, использование свойств - более безопасный метод, чем непосредственное обращение к полю. А если, к примеру, создавать экземпляр бессмысленно? Что, к примеру, может дать создание экземпляра класса типа System.Math? А еще это могут быть фабричные методы, которые как раз-таки и создают экземпляры. А иногда методы к экземплярам вообще имеют только логическое отношение, то есть они не обращаются к экземпляру или его членам, но каким-то образом связаны с классом, а стало быть их там просто легче найти. Для примера можно взять System.Xml.XmlReader.IsName(string). Метод просто проверяет строку на предмет того, является ли она корректным XML-именем, да ридер этот метод использует, только для использования этого метода экземпляр ридера не нужен. И если тебе понадобится выполнить такую проверку, то создавать экземпляр ридера не придется. А для того чтобы ассоциироваться с определенным классом ( я имею в виду класс, в котором он определен) могут быть разные причины: он в этом классе используется, он связан с ним логически и там его проще найти, он обрабатывает экземпляры класса и ему может потребоваться доступ к приватным членам.
1
|
Администратор
![]() |
|||||||
27.03.2016, 07:38 | 5 | ||||||
0
|
27.03.2016, 17:27 | 6 | |||||
Добавлю, что можно создавать свойства только для чтения или только за запись
Пример свойства на чтение:
0
|
27.03.2016, 17:27 | |
Помогаю со студенческими работами здесь
6
Событие, возникающие когда контролы расположились на форме в отрисованном окне Возникновение странных погрешностей около нуля и возникающие из-за нее косяки Постоянная работа с xml-файлом настроек программы и возникающие ошибки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |