![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 1 Всего: 25 |
есть ли возможность в C# объявить аналог константной функции C++?
чтобы, вызывая ее, я был уверен, что она не поменяет переменные-члены своего класса |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
ИМХО, нет такого.
-------------------- ![]() |
|||
|
||||
iad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 10.9.2007 Где: Москов Репутация: 0 Всего: -2 |
Только так:
еще можно использовать модификаторы доступа internal, но это уже будет нарушением инкапсуляции |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
iad, это отдаленно напоминает реализацию свойств...
Alek86, ИМХО имеет в виду обычные плюсовые константные ф-ции. Если сделать свойства только на чтение и работать только через них (а это правильно, в принципе), то значения членов класса изменить будет нельзя. Опять же, Alek86, смотря что понимать под изменением члена класса (и какой тип члена класса). Если
то m_i не изменится. Но если член класса - ссылочный, то он изменится. Методы класса имеют неограниченный доступ к членам своего класса. Повторяю - не работай с полями класса напрямую нигде, кроме как в конструкторах, инициализаторах и свойствах. Это сообщение отредактировал(а) tol05 - 4.10.2007, 10:35 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 1 Всего: 6 |
Немного я конечно не в тему... Ну почему? Почему internal - нарушение инкапсуляции? Извне сборки интернал-поля же не видны, правильно? Дык в чём проблема? Тем более порой бывает гораздо проще тупо объявить переменную интерналом, чем перелопачивать всю иерархию классов... Да и вообще, с рефлектором не то, что internal, private поля - как на ладони... ![]() -------------------- 3 ГОДА НА ![]() |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 1 Всего: 25 |
спасибо за ответы, но самый хороший ответ прозвучал у mr.DUDA
![]() потому что во всех остальных примерах я, если использую чужой класс, не могу быть уверен, что он после выполнения определенной функции не изменится. слово const в сях давало хоть какую-то гарантию... и, не подскажет ли кто, почему эту возможность в шарпе убрали? |
|||
|
||||
iad |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 10.9.2007 Где: Москов Репутация: 0 Всего: -2 |
я тоже их имею ввиду
|
||||
|
|||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
iad
В том контексте, в котором я говорил (и с тем примером, что я привел) - я не сказал направды Описывать все варианты, все типы данных (а потом и отличия между ними и т.д. и т.п. ) .... Мне что, переписать себе в пост несколько толстых учебников??? Короче... даже отвечать тебе - "не сто'ит" .... :((( -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
iad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 10.9.2007 Где: Москов Репутация: 0 Всего: -2 |
||||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
iad, пожалуйста без наездов! Тут идёт обсуждение! А не мерянье пип.
Тем более, что tol05, ИМХО, прав: хочешь запретить изменение элементов класса --- убери все сеттеры. Твой пример ни на что не годиться, так как программер, кот запретит изменение члена класса позаботиться, чтобы и этот член не имел интерфейса для прямого своего изменения. А создавать такие классы как у тебя, а потом говорить, что я запретил изменять их элементы как минимум смешно. |
|||
|
||||
iad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 10.9.2007 Где: Москов Репутация: 0 Всего: -2 |
так вот программер позаботится по аналогии с моим первым примером(жаль, что невнимательно чиаешь данное обсуждение)а в С++ есть возможность без гимора решить задачу.. C# таких возможностей не дает - поэтому пытаемся скандалить ![]() ![]() |
|||
|
||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
iad, у тя пример, всего лишь пример (хотя я такого бы не писал)... Я же описал общий подход.
Кста, для САБЖА может применяться паттерн декоратор. Посмотреть на его реализацию можно в самом фрэймворке. Класс ArrayList и статический метод ReadOnly:
Вот сам Класс декоратор:
|
||||
|
|||||
iad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 10.9.2007 Где: Москов Репутация: 0 Всего: -2 |
Декоратор тоже вариант. ок. Но проверка изменения объекта будет в рантайме. си++ый вариант позволяет отследить попытки изменения на этапе компиляции.. считаю это большим плюсом и с удовольствием бы пользовался такой возможностью
![]() |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
два момента: 1. Где я был некомпетентен? В какой строчке какого поста? Я не начал объяснять что есть ссылочные типы, есть типы значений и т.д. и т.п.? Не просили 2. Какова вообще была твоя цель, когда ты свой первый пост писал? Автору помочь или себя показать? Автору ты не помог и даже не пытался. Ну а себя... да, показал. -1 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Кто нить мне может объяснить нафик этот const нужен? Я понимаю еще такую конструкцию:
Но какой толк от конструкции:
Ведь ты САМ пишешь эту функцию и ты САМ знаешь что можно менять, а что нет. Зачем ещё просить компилятор: "Вот это вот менять ни в коем случае нельзя! Так что напомни, мне глупому, если я захочу это поменять..." |
||||||
|
|||||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |