|
Как узнать, есть ли у метода какой-либо код (тело)?
|
|||
---|---|---|---|
#18+
Нужно выяснить, делает ли реализация метода хоть что-нибудь. Что смог придумать: Код: c# 1.
если тела нет - возвращает 2 Опишу и общую задачу, на всякий. Метод реализован всегда, этого требует absctract в базовом классе. Однако, он может ничего не делать, если это не нужно в конкретном подклассе. В другом месте есть контрольная точка: если метод ничего не делает, то один из параметров может быть пустым, если делает - генерируется ошибка, значит программер накосячил. То есть проверку можно в принципе сделать только в DEBUG-варианте и не вызывать в релизе. В принципе, понимаю, что задачу можно реализовать иначе - заставить метод что-то возвращать, перевести его на virtual вместо abstract, но хотелось бы в таком варианте. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 15:53 |
|
Как узнать, есть ли у метода какой-либо код (тело)?
|
|||
---|---|---|---|
#18+
Shocker.Proно хотелось бы в таком варианте. идея - нездоровая Shocker.ProВ другом месте есть контрольная точка: если метод ничего не делает, то один из параметров может быть пустым это забота вызываемого, а не вызывающего ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 16:31 |
|
Как узнать, есть ли у метода какой-либо код (тело)?
|
|||
---|---|---|---|
#18+
Shocker.ProВ другом месте есть контрольная точка: если метод ничего не делает, то один из параметров может быть пустым, если делает - генерируется ошибка, значит программер накосячил. То есть проверку можно в принципе сделать только в DEBUG-варианте и не вызывать в релизеВижу как минимум, 2 варианта - "навскидку" и "в-лоб". Раз: Код: c# 1. 2. 3.
Два: Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2014, 17:09 |
|
Как узнать, есть ли у метода какой-либо код (тело)?
|
|||
---|---|---|---|
#18+
Shocker.ProНужно выяснить, делает ли реализация метода хоть что-нибудь. Что смог придумать: Код: c# 1.
если тела нет - возвращает 2 Опишу и общую задачу, на всякий. М етод реализован всегда, этого требует absctract в базовом классе . Однако, он может ничего не делать, если это не нужно в конкретном подклассе. В другом месте есть контрольная точка: если метод ничего не делает, то один из параметров может быть пустым, если делает - генерируется ошибка , значит программер накосячил. То есть проверку можно в принципе сделать только в DEBUG-варианте и не вызывать в релизе. В принципе, понимаю, что задачу можно реализовать иначе - заставить метод что-то возвращать, перевести его на virtual вместо abstract, но хотелось бы в таком варианте. Я вам настоятельно рекомендую исправить архитектуру в этой части. Что-то здесь неправильно. Представте, что после вас придет другой разработчик, которому придется курить вашу рефлексию и понять зачем она здесь. Намного проще все и правильнее все это исправить архитектурой. Resharper в помощь, чтобы не делать много рутинной работы если у вас много наследников от абстрактного класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2014, 08:28 |
|
Как узнать, есть ли у метода какой-либо код (тело)?
|
|||
---|---|---|---|
#18+
LameUserПредставте, что после вас придет другой разработчик, которому придется курить вашу рефлексию и понять зачем она здесь.естественно, это единственная строчка тщательно прокомментирована. Кстати, немножко неправильно описал - реализовать метод обязывает интерфейс. Но реализация может быть пустой. Изопропилэто забота вызываемого, а не вызывающегоНу так о вызываемом и речь. Некто создает экземпляр подкласса и инициализирует его поля. Есть поле, условно говоря "текст сообщения об ошибке". У подкласса есть метод "проверить на ошибку". Он вызывается "где-то потом", если чо - выведет пользователю указанное сообщение. Так вот, если метод "проверить на ошибку" реально ничего не проверяет, то допустимо не задавать текст сообщения об ошибке, он все равно не понадобится. Но есть тело есть - сообщение обязано быть. Ловить косяк в момент срабатывания метода нелогично, ситуация может возникать раз в сто лет, а отловить неверную инициализацию подкласса можно довольно просто средствами базового класса и отлов произойдет сразу на этапе разработки при первом же запуске. Поэтому я сделал такой "самоконтроль для программиста". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2014, 10:51 |
|
Как узнать, есть ли у метода какой-либо код (тело)?
|
|||
---|---|---|---|
#18+
Shocker.ProПоэтому я сделал такой "самоконтроль для программиста". этот самоконтоль лучше вычистить. Осетрина второй свежести не бывает. Если требуется текст сообщения - значит требуется. Точка ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2014, 10:58 |
|
Как узнать, есть ли у метода какой-либо код (тело)?
|
|||
---|---|---|---|
#18+
Shocker.Pro, В принципе пойдет для тур дефранс, только проверить надо и для релиза, может быть и не два, (оптимизация компилятора) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2014, 11:08 |
|
Как узнать, есть ли у метода какой-либо код (тело)?
|
|||
---|---|---|---|
#18+
ИзопропилЕсли требуется текст сообщения - значит требуется. ТочкаЗачем писать текст, который заведомо не будет использоваться? Ну хорошо, запретить пустую строку для сообщения. Программист будет писать "x$%", чтобы обойти ограничение пустой строки, так как он знает, что это сообщение никогда не появится. Так вот важно, чтобы он не написал "x$%" (или пустую строку, что в данном случае проще) так, чтобы это увидел пользователь из-за ошибки программиста. Это, в общем, такой, немного специфический контракт кода получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2014, 11:10 |
|
|
start [/forum/topic.php?fid=20&fpage=115&tid=1402758]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 325ms |
total: | 446ms |
0 / 0 |