C# snippet

14 marca 2008, 23:26

KomentarzeKomentarze: 0 KategorieKategorie: .net

Właśnie spędzam troszkę czasu nad pewnym programikiem. Staram sobie ułatwić pracę jak mogę, więc szukam różnych możliwości poprawy efektywności pracy. Snippet's są właśnie takim ułatwieniem. Niestety podstawowe funkcje to troszkę za mało, więc postanowiłem zwiększyć sobie ich ilość dodając kolejne. Na pierwszy ogień poszedł Singleton.

Snippet Singleton 

Szybkie wstawienie wygenerowanego kodu można wykonać na dwa sposoby, albo klikamy prawym klawiszem i wybieramy opcję 'Insert Snippet', albo wpisujemy skrót, który zostanie wylistowany przez Intellisence.

Klikamy Tab i kod wstawiony. No tak, ale klasa potrzebuje nazwy. Przydało by się także jakoś nazwać prywatną nazwę instancji klasy singleton'a. Nie ma problemu. Po wstawieniu kodu Visual Studio wskazuje kolorem zielonym (w standardowym schemacie kolorów) aktywne miejsca, których wypełnienie odpowiednio zamienia standardowe nazwy na te, które wprowadzamy.

Klikamy w zielone pole SingletonName i wpisujemy własną nazwę. Enter kończy tworzenie kodu, ale możemy jeszcze wpisać własną nazwę statycznej właściwości przetrzymującej instancję naszego obiektu. W tym celu wystaczy kliknąć Tab, wpisać nazwę i teraz dopiero Enter. W tym momencie Snippet został całkowicie zamieniony na kod, czyli nową klasę realizującą wzorzec Singleton.

Tworzenie Snippet'ów

Snippet to nic innego jak plik XML z odpowiednią strukturą, która wcale nie jest trudna do opanowania. Składa się z dwóch podtsawowych części: nagłówka i definicji kodu. Nagłówek opisują takie tagi jak:

  • Title - nazwa snippeta
  • Shortcut - skrót, który zostanie użyty w Intellisence
  • Description - opis
  • Author - autor snippeta
  • SnippetTypes - lista typów, np.: Expansion - wstawia się zamiast zaznaczonego fragmentu kodu lub w miejsce postawionego kursora

Druga część pliku to definicja kodu. W niej definiujemy te "zielone nazwy", o których pisałem wyżej. Służy do tego tag Declarations, gdzie każda "zielona nazwa" opisana jest tagiem Literal. Każdy Literal składa się z:

  • ID - kod nazwy, np.: kod dla nazwy klasy w moim przykładzie to "$name$" 
  • Tootip - nie wymaga tłumaczenia ;)
  • Default - domyślna nazwa, która w przypadku pominięcia określenia nazwy zostanie użyta w wygenerowanym kodzie

Dalej w tej samej sekcji jest jeszcze tag Code, który jest niczym innym jak pseudo-kodem generowanego kodu - w naszym przypadku Singleton'a. Poniżej przykładowy pseudo-kod:

   1:      public class $name$
   2:      {
   3:          private static $name$ $private$ = null;
   4:   
   5:          public static $name$ Current
   6:          {
   7:              get
   8:              {
   9:                  if($private$ == null)
  10:                  {
  11:                      lock(typeof($name$))
  12:                      {
  13:                          if($private$ == null)
  14:                          {
  15:                              $private$ = new $name$();
  16:                          }
  17:                      }
  18:                  }
  19:                  return $private$;
  20:              }
  21:          }
  22:   
  23:          private $name$()
  24:          {
  25:          }
  26:      }

Napisany przeze mnie snippet generujący klasę Singleton oczywiście można pobrać i wgrać do własnej kolekcji. Snippety kodu C# mieszczą się standardowo w katalogu: "C:\Program Files\Microsoft Visual Studio 9.0\VC#\Snippets\1033\Visual C#".

Mam nadzieję, żę choć troszkę przybliżyłem temat snippet'ów. W miarę możliwości będę udostępniał kolejne :)

Ten artykuł jest widoczny także na: ZINE.NET

Jeśli spodobał Ci się ten artykuł, to podziel się tą informacją z innymi.

Nikt jeszcze nie skomentował tego artykułu. Bądź pierwszy.

Dodaj komentarz Dodaj komentarz

Twój email (niepublikowany/opcjonalnie):

Twoja strona (opcjonalnie):

Imię i nazwisko/nick (wymagane):

Treść (wymagane):

Chcę być poinformowany o kolejnych komentarzach:

To pole zostaw puste

Uwaga! Zastrzegam sobie prawo do usuwania obraźliwych i wulgarnych komentarzy.