W dobie tak potężnych narzędzi jak Visual Studio programiści często zdają się całkowicie na ich funkcjonalność. Jedną z (wspaniałych zresztą) cech współczesnych IDE jest Intellisense. Czy wyobraża ktoś sobie pisanie kodu bez podpowiedzi? Zobaczmy jednak, że nie zawsze można na tym elemencie polegać w 100% ze względu na “konfigurowalność” nawet tego mechanizmu VS.
Dla przykładu załóżmy dwie solucje (w C# nie wystarczą 2 osobne projekty w jednej solucji, w innych językach nie sprawdzałem): ClassLibrary1 oraz ConsoleApplication1. Dodajmy referencję CL1 do CA1. W CL1 stwórzmy klasę Class1 takiej postaci:
1: public class Class1
2: {
3: public void HideMe()
4: {
5: }
6: }
Gdy teraz w aplikacji konsolowej będziemy chcieli wykorzystać metodę HideMe – efekt jest znany:
Wystarczy jednak mała modyfikacja ze strony programisty udostępnianej biblioteki:
1: public class Class1
2: {
3: [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
4: public void HideMe()
5: {
6: }
7: }
i mamy publiczną metodę niewidoczną w Intellisense!
Jeżeli zatem tworzymy jakiś komponent i pewne jego składowe muszą być publicznie dostępne, a jednocześnie nie chcemy aby lista Intellisense przyprawiła korzystającego z niego programistę o zawrót głowy – oto nasze rozwiązanie.
Ale uwaga – “use with care”; niebezpodstawne będzie chyba założenie, że wsród programistów można spodziewać się reakcji “jeżeli czegoś nie ma w Intellisense to to nie istnieje”. Zupełnie jak w polityce – jeżeli nie ma strajków to znaczy że “żyje się lepiej. Wszystkim.”
przy okazji proponuje zapoznac sie z wycinkami informacji w temacie http://forum.4programmers.net/viewtopic.php?p=373369#id373369
Otóż to. Sam zawsze sprawdzam czy po . mam coś do wyboru, jeśli nie to wiem, że coś skopałem ;) Jakoś nie widzę sensu żeby ukrywać coś w Intellisense bo późniem sam moge się na to nabrać.
później*
Ja równiez nie widziałem sensu ukrywania, ale dziś go znalazłem.
Oznaczałem jedną ze starych metod, przepisanych na nową wersję, jako obsolete.
Przypomniałem sobie o tym poście i postanowiłem ją ukryć – by nie kusiła, dopóki nie wyleci z biblioteki.
Co jednak zauważyłem – metoda była statyczna i nadanie tego atrybutu nie spowodowało ukrycie jej w intellisense.. Albo coś źle zrobiłem ;)