![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Skynin |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
Можно, только руками, не на уровне синтаксиса:
Малополезная вещь при грамотном проектировании. Решение "в лоб" - выше. Это сообщение отредактировал(а) Skynin - 13.8.2009, 21:19 |
||||||
|
|||||||
| PashaPash |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
Skynin, решение влоб ломается вот так
Да и хочется же проверки на уровне синтаксиса. bvn13, вообще сама идея выставлять переменную из другого класса - это как-то не комильфо. Вариант - интерфейс с read only проперти. Что-то типа
|
||||
|
|||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
|
|||
|
||||
| Bestoloch |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 29.6.2009 Репутация: нет Всего: нет |
На сколько я понимаю абстрагирование слоев это best practice.
В данном случае есть слой работы с базой данных, в работу которого должен вмешаться класс из другого слоя, зачем? |
|||
|
||||
| Skynin |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
В C# почти все ломается рефлексией. Так что теперь, и не жить? Задача то - избавиться от непреднамеренно некорректного использования метода присваивания. А не защита от "хакера". Если же нужно чтобы только один объект класса мог присвоить, ну так и сделать его синглтоном, и упрятать конструктор без параметров. Но если быть параноиком, то обсуждение этого плевого вопроса потянет не на одну страницу
тогда, проверка во время компиляции
где ClassB, ClassC, ClassD - дружественные к ClassA Это сообщение отредактировал(а) Skynin - 14.8.2009, 10:48 |
||||||
|
|||||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
IMHO, Защита на уровне синтаксиса не должна ломаться на уровне синтаксиса. Защита на уровне кода не должна ломаться вписыванием не-рефлекш кода. Даже если это защита от дурака, а не от хакера. Любой дурак при попытке вызвать метод неоттуда впишет new ClassB, тупо проверить, а вдруг заработает - и ведь заработает Ну и в целом система с sender напоминает "скажи пароль - пароль - проходи"
Задача - избавится от непреднамеренно некорректного использования метода присваивания без дополнительных телодвижений со стороны используещего. sender - это уже ограничение - нельзя вызвать из статического класса/метода. И повышение coupling - в случае friend или интерфейса реализация ничего не знает о классе-пользователе, в случае sender - знает более чем достаточно. и даже может вызвать в нем что-нибудь - снаружи ж не видно. Для таких случаев есть Interface-Segregation Principle. |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Так и не проще ли воспользоваться свойствами? -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |