metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-12-11 01:04 pm
Entry tags:

private/internal методы и классы в .NET

А вот скажите, почему у авторов гопнета так популярно делать классы и методы недоступными для разработчиков?
Сейчас сижу, например в ILSpy и делаю обертку над ServiceController, потому что нельзя без ловли исключений узнать, существует ли сервис, а конфигурацию сервиса так и вообще никак прямо узнать нельзя. При этом все полезные методы и классы (нативный интероп итд) сугубо приватные или внутренние.

[identity profile] evil-invader.livejournal.com 2012-12-11 10:07 am (UTC)(link)
я с такой же проблемой сталкивался, когда пытался подточить VCL для специфических задач. Так рубило, что уже чуть ли не думал, как бы сделать грязный хак.

[identity profile] bydlorus.livejournal.com 2012-12-11 10:29 am (UTC)(link)
Т.е. в жабе такого нет? Непонятно, при чём тут .NET.

[identity profile] berezovsky.livejournal.com 2012-12-11 10:58 am (UTC)(link)
ещё помню западло было, если сервис управляется с клиентского компа, надо было спрашивать админовские креденшиалы, шифровать, передавать на сервер, делать имперсонацию контекста и только потом дёргать сервис контроллер
Edited 2012-12-11 11:02 (UTC)

[identity profile] gineer.livejournal.com 2012-12-11 11:07 am (UTC)(link)
Угу... вы еще про Эппл подобное спросите. :)

[identity profile] psilogic.livejournal.com 2012-12-11 11:29 am (UTC)(link)
Это не только у авторов гоп-нета.
Обычно "приватизируют" ради совместимости - чтобы потом спокойно менять в следующих версиях, а кто полез хакать - сам дурак.

[identity profile] altmind.livejournal.com 2012-12-11 11:36 am (UTC)(link)
торжество инкапсюляции начинается тогда, когда в умах программистов начинают бродить мысли о CYA(клиенты расширяют классы, нарушают контракты в коде а потом сношают мозг саппорту). Когда программисты понимают, что не могут предусмотреть все случаи использования компонентов и что возможность кастомизации любых классов является залогом расширяемости и гибкости, появляется инкапсюляция в стиле питона, где инкапсюляция не энфорсится.

отдельного разговора требует принцип "make all classes final by default", по которому в свое время проехался nikitonsky.

[identity profile] bydl0coder.livejournal.com 2012-12-11 11:38 am (UTC)(link)
"Бляди, сэр".

[identity profile] bydl0coder.livejournal.com 2012-12-11 11:41 am (UTC)(link)
Делал "форк" ASP.NET MVC, чтобы отправлять с веб-сайта письма. Это последней каплей стало.

[identity profile] n16bs.livejournal.com 2012-12-11 12:11 pm (UTC)(link)
Ну какбэ очевидно что то, что паблик - этим будут пользоваться индусыюзеры. Значит на это нужно писать доку в мсдн, нужно продумать 100500 безумных способов которыми юзер заюзает эти методы, нужно отвечать на вопросы про них в social.ms.com и т.д.

И что, неужели в этих ваших скалах в стандартной либе всё наружу торчит?

[identity profile] n16bs.livejournal.com 2012-12-11 12:12 pm (UTC)(link)
Алсо >ILSpy
Попробуйте DotPeek от jetbrains.

(Anonymous) 2012-12-11 12:13 pm (UTC)(link)
Из-за сего факта пришлось писать свой Heap, с поддержкой удаления элемента по валуе из серединки. Как стандартными контейнерами сделать тоже я не разобрался.
А так бы как унаследовался бы, прикрутил бы сбоку кэшер позиций в значений в массиве...

[identity profile] vit-r.livejournal.com 2012-12-11 12:49 pm (UTC)(link)
Старинная политика фирмы

[identity profile] max630.livejournal.com 2012-12-11 02:03 pm (UTC)(link)
Ну а как по другому? Потом поменять направление обхода контейнера - и все говнохаки поломаются, визгу будет на весь интернет. Авторам это надо?

[identity profile] bydl0coder.livejournal.com 2012-12-11 02:04 pm (UTC)(link)
Нужно, кстати, развить конспирологическую версию о том, что во всем этом виноват интеллисенс. То есть можно накрутить лапши из говна (потому что интеллисенс показывает все разработчикам из МС), а потом закрыть (чтобы интеллисенс не показывал ее разработчикам приложений)

[identity profile] mudasobwa.livejournal.com 2012-12-13 04:31 am (UTC)(link)
Не самый элегантный вариант, конечно, но reflection (http://stackoverflow.com/questions/135443/how-do-i-use-reflection-to-invoke-a-private-method-in-c) не поможет?