Niezależnie od języka programowania, czytelność kodu to podstawowa zasada współpracy grupy programistów. Nie mniej ważne są komentarze, które pozwalają na opis ważnych lub niezrozumiałych fragmentów kodu. C#, należący do rodziny języków C, udostępnia dwa style komentowania kodu.
Komentarze jednowierszowe tworzone są przez sekwencję dwóch znaków: //
. W przypadku komentarzy oddzielnych sekwencja rozpoczynająca to: /*
, a zamykająca: */
. Cały tekst wprowadzony w komentarzach jest ignorowany przez kompilator. Dodatkowo, komentarz oddzielny może zostać zapisany w kilku liniach kodu.
using System;
namespace HelloWorld
{
public class Program
{
public static void Main(string[] args)
{
// Wyświetlamy
Console.Write("Hello world C#"); // komunikat
/*
Komentarz
zapisany
w
kilku
liniach.
*/
}
}
}
Komentarze przydają się również w sytuacji, w której chcemy tymczasowo pominąć fragment kodu w kompilacji. Visual Studio udostępnia przydatną funkcjonalność umożliwiającą komentowanie oraz odkomentowanie zaznaczonego bloku kodu.
Oczywiście to samo możemy uzyskać za pomocą skrótów klawiszowych, klikając Ctrl + E, C w przypadku komentowania oraz Ctrl + E, U w przypadku odkomentowania. Kompilator Visual Studio pomija nie tylko komentarze, ale również białe znaki.
using System;
namespace HelloWorld
{
public class Program
{
public static void Main(string[] args)
{
Console.Write("Hello world C#");
Console . Write ("Hello world C#") ;
Console.
Write
("Hello world C#");
}
}
}
Język C#, a dokładnie Visual Studio, pozwala również na tworzenie dokumentacji kodu w formacie XML. Domyślnie opcja jest wyłączona. W celu włączenia jej, należy przejść do właściwości projektu, wybrać zakładkę Build, a następnie zaznaczyć opcję XML documentation file w sekcji Output. Po zaznaczeniu, Visual Studio generuje ostrzeżenia dla publicznych elementów, które nie posiadają opisu. Aby uzupełnić opis, wystarczy umieścić trzy znaki ///
przed linią zawierającą opis, a środowisko automatycznie wygeneruje strukturę. Szczegółowy opis tworzenia dokumentacji XML można znaleźć tutaj. Poniżej zamieszczam kod programu HelloWorld, rozszerzony o dokumentację.
using System;
namespace HelloWorld
{
/// <summary>
/// Podstawowa klasa projektu
/// </summary>
public class Program
{
/// <summary>
/// Punkt uruchomienia programu
/// </summary>
/// <param name="args">Tablica parametrów wejściowych</param>
public static void Main(string[] args)
{
Console.Write("Hello world C#");
}
}
}
C# udostępnia dyrektywy preprocesora, podobnie jak język C. Jednak C# nie posiada odrębnej fazy wstępnego przetwarzania kodu. Zaczynając od najprostszej dyrektywy #region
, która nie powoduje żadnych zmian w działaniu programu, z wyjątkiem sytuacji, w której kompilator po wystąpieniu #region
nie znajdzie #endregion
, zgłaszając błąd kompilacji. Para dyrektyw rozpoznawana jest przez Visual Studio jako "region kodu", umożliwiając "zwinięcie" kodu objętego dyrektywami. Po dyrektywie rozpoczynającej możemy wstawić dodatkowy opis, reprezentujący zwinięty kod. Dyrektywy #region
i #endregion
możemy zagnieżdżać wewnątrz siebie.
Ten sam efekt możemy uzyskać poprzez zaznaczenie tekstu i kliknięcie prawym przyciskiem myszy, a następnie wybierając z menu Surround With... / #region.
Dyrektywa #pragma
pozwala na wyłączenie ostrzeżeń kompilatora. W poniższym przykładzie wyłączamy ostrzeżenie generowane przez kompilator w sytuacji deklaracji zmiennej, która nie została użyta w dalszym kodzie.
Dyrektywa #define
pozwala na definiowanie symbolu kompilacji. Visual Studio domyślnie posiada dwa zdefiniowane symbole kompilacji: Debug i Release. Najczęstszym zastosowaniem dyrektyw jest ich połączenie z dyrektywami: #if
, #else
, #elif
oraz #endif
, dzięki czemu możemy zapewnić kompilację bloku kodu wyłącznie dla określonego symbolu kompilacji.
using System;
namespace HelloWorld
{
public class Program
{
public static void Main(string[] args)
{
#if DEBUG
Console.WriteLine("Uruchomienie metody: Main");
#endif
Console.WriteLine("Hello world C#");
#if DEBUG
Console.WriteLine("Zakończenie metody: Main");
#endif
Console.ReadLine();
}
}
}
Jeżeli wybierzemy kompilację Release, kod objęty dyrektywą #if DEBUG
zostanie wyszarzony, informując o pominięciu w kompilacji. Alternatywnym rozwiązaniem jest wykorzystanie metod warunkowych opisanych przy okazji omawiania System.Diagnostics
. Na koniec wspomnę o istnieniu dyrektyw: #error
oraz #warning
, pozwalających na generowanie błędów i ostrzeżeń kompilatora oraz #line
wskazującej miejsce powstania błędu. Dokładny opis dyrektyw można znaleźć na stronie Microsoft.