fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
2 minut

Gra w chowanego z Intellisense


13.03.2008

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.”

0 0 votes
Article Rating
4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
quetzalcoatl
16 years ago

przy okazji proponuje zapoznac sie z wycinkami informacji w temacie http://forum.4programmers.net/viewtopic.php?p=373369#id373369

Andrzej Stolarczyk
15 years ago

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ć.

Andrzej Stolarczyk
15 years ago

później*

andrzej
15 years ago

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 ;)

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Książka

Zobacz również