Здравствуйте, Аноним, Вы писали:
А>кто мне объяснит зачем мне доступен метод Add, который всегда будет кидать эксепшн?
«Framework Design Guidelines», глава «9.7 Optional Feature Pattern».
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: int[].Add
От:
Аноним
Дата:
25.11.10 06:48
Оценка:
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
А>>кто мне объяснит зачем мне доступен метод Add, который всегда будет кидать эксепшн?
A>А какова альтернатива?
чтобы у меня были доступны методы которые я могу всегда использовать
Здравствуйте, Аноним, Вы писали:
A>>А какова альтернатива? А>чтобы у меня были доступны методы которые я могу всегда использовать
И как вы предлагаете это реализовать? IList<> может быть поиницилизирован очень далеко, вообще в другом модуле. С какой стати компилятору запрещать вам вызывать метод?
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
A>>>А какова альтернатива? А>>чтобы у меня были доступны методы которые я могу всегда использовать
A>И как вы предлагаете это реализовать? IList<> может быть поиницилизирован очень далеко, вообще в другом модуле. С какой стати компилятору запрещать вам вызывать метод?
как реализовать это вопрос другой. я говорю про то, что если у вас есть кнопка на телефоне Позвонить, то она должна звонить, а не говорить мне "я не могу это сделать, т.к. кнопку воткнули для совместимости с общим модулем управления клавиатурой"
Здравствуйте, Qbit86, Вы писали:
Q>Здравствуйте, Аноним, Вы писали:
А>>кто мне объяснит зачем мне доступен метод Add, который всегда будет кидать эксепшн?
Q>«Framework Design Guidelines», глава «9.7 Optional Feature Pattern».
это называется "перекуем баги архитектуры в фитчи"
Здравствуйте, Аноним, Вы писали:
A>>И как вы предлагаете это реализовать? IList<> может быть поиницилизирован очень далеко, вообще в другом модуле. С какой стати компилятору запрещать вам вызывать метод? А>как реализовать это вопрос другой.
Это основной вопрос. Если вы не можете предложить ничего лучше, то не ругайте то, что есть.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
A>>>И как вы предлагаете это реализовать? IList<> может быть поиницилизирован очень далеко, вообще в другом модуле. С какой стати компилятору запрещать вам вызывать метод? А>>как реализовать это вопрос другой.
A>Это основной вопрос. Если вы не можете предложить ничего лучше, то не ругайте то, что есть.
основной вопрос: зачем показывать то, что мне недоступно для использования?
предложение: чтобы мне было доступно, что я могу использовать. зачем мне бутафория
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
А>>основной вопрос: зачем показывать то, что мне недоступно для использования?
A>Простите, у меня впечатление что вы первый день программируете или просто тролль.
думаю, проблема в другом — вы мыслите с точки зрения программиста, а я пользователя
поэтому вариант, что каждый останется при своем мнении мне видится оптимальным
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
A>>>И как вы предлагаете это реализовать? IList<> может быть поиницилизирован очень далеко, вообще в другом модуле. С какой стати компилятору запрещать вам вызывать метод? А>>как реализовать это вопрос другой.
A>Это основной вопрос. Если вы не можете предложить ничего лучше, то не ругайте то, что есть.
Я тоже считаю что в интерфейсах коллекций бардак. Другое дело — я привык к нему. Предлагать ничего не буду, не готов прямо сейчас, да и бестолку это. Но уверен, что можно было сделать лучше.
Здравствуйте, samius, Вы писали:
A>>Это основной вопрос. Если вы не можете предложить ничего лучше, то не ругайте то, что есть. S>Я тоже считаю что в интерфейсах коллекций бардак. Другое дело — я привык к нему. Предлагать ничего не буду, не готов прямо сейчас, да и бестолку это. Но уверен, что можно было сделать лучше.
Здравствуйте, Qbit86, Вы писали:
Q>Здравствуйте, Аноним, Вы писали:
А>>кто мне объяснит зачем мне доступен метод Add, который всегда будет кидать эксепшн?
Q>«Framework Design Guidelines», глава «9.7 Optional Feature Pattern».
Есть рецепт, как можно понять, можно ли вызывать метод IList<T>.Add без получения исключения и даункастинга?
А>кто мне объяснит зачем мне доступен метод Add, который всегда будет кидать эксепшн?
А какая разница — всегда или нет? Вы же вызываете Add у интерфейса и с точки зрения интерфейса вызов Add далеко не "всегда будет кидать эксепшн"
А вот с точки зрения массива у вас метода Add нет.
Если так топорно, "c т.з. пользователя", как вы демонстрируете, рассуждать, то зачем вообще могут быть (имеют ли право на существование?) методы, которые, в зависимости от внутреннего состояния объекта, могут вести себя по разному (например, при некотором состоянии всегда "кидать")? (Заметьте, что нарушением LSP тут и не пахнет, ибо говорим мы не о наследовании, а о реализации интерфейсов.)
Развивая далее: методов a-la
override void M1() {
throw new NotSupportedException();
}
override void M2() {
throw new NotImplementedException();
}
быть так же не должно, как вам кажется? Или какие-то оговорки на этот счёт "для пользователя" могут иметь место?
Если вы неквалифицированный "пользователь", то никакого права диктовать, _как_ должно выглядеть то, что сделано [допустим] специалистом, у вас нет. Главное, что бы вы могли решить все заявленные задачи с помощью сделанного. Квалифицированный же "пользователь" не может быть квалифицированным без знания аспектов использования предмета критики. Вы же увидели один частный пример и на основании его делаете вывод о чьих-то ошибках. Вы не квалифицированный пользователь и ваше мнение не может быть интересно.
Что бы заинтересовать, рассуждайте шире. Рассмотрите всевозможные сценарии использования коллекций. Вы увидите, что интерфейсы для readonly-списков и коллекций попросту не нужны. Массивов и ReadOnlyCollection<> часто достаточно. ReadOnlyCollection2<> (без реализации IList/IList<>), ReadOnlySet<>, ReadOnlyDictionary<> и ковариантные классы readonly-коллекций для нового фреймворка могут покрыть все задачи. Заметье, речь тут не об интерфейсах, а о классах, которые вы можете написать самостоятельно и использовать, не имея никаких проблем с тем, что где-то видно больше, чем хотелось бы. Если у вас есть какая-то задача, которую нельзя было бы решить предложенным мною способом, было бы интересно взглянуть. Но подумайте, пожалуйста, хорошенько.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, samius, Вы писали:
А>>>кто мне объяснит зачем мне доступен метод Add, который всегда будет кидать эксепшн? Q>>«Framework Design Guidelines», глава «9.7 Optional Feature Pattern». S>Есть рецепт, как можно понять, можно ли вызывать метод IList<T>.Add без получения исключения и даункастинга?
В этом суть паттерна и заключена, что на все подобные кейсы "есть рецепт". Подробнее ознакомиться можно здесь.
Help will always be given at Hogwarts to those who ask for it.