Gra w chowanego z Intellisense

4

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

Nie przegap kolejnych postów!

Dołącz do ponad 9000 programistów w devstyle newsletter!

Tym samym wyrażasz zgodę na otrzymanie informacji marketingowych z devstyle.pl (doh...). Powered by ConvertKit
Share.

About Author

Programista, trener, prelegent, pasjonat, blogger. Autor podcasta programistycznego: DevTalk.pl. Jeden z liderów Białostockiej Grupy .NET i współorganizator konferencji Programistok. Od 2008 Microsoft MVP w kategorii .NET. Więcej informacji znajdziesz na stronie O autorze. Napisz do mnie ze strony Kontakt. Dodatkowo: Twitter, Facebook, YouTube.

4 Comments

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

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