Direktívákat definiálni a #define kulcsszó után tudunk.
#define TEST
#define AB
#define B
Ha már nincs szükségünk egy definiált direktívára, akkor azt az #undef –el szüntethetjük meg.
Ha létrehoztunk egy direktívát, akkor annak meglétét az #if direktívával ellenőrizhetjük.
Ha a TEST létezik, akkor a következő sor kerül a készítendő programba lefordításra.
private void button1_Click(object sender, System.EventArgs e)
{
#if (TEST)
label1.Text = "TEST";
Ha a TEST nem létezik, akkor az #else direktíva utáni rész kerül a programba. Az #else használata nem kötelező.
#else
label1.Text = "not TEST";
Az #if direktívát az #endif-el kell lezárnunk. Az így közrezárt blokkra vonatkozik az, hogy bekerül-e a programba vagy sem. Ha használunk #else-t, akkor az #endif ezt zárja, míg ez esetben az #if hatása az #else-ig tart. Ez pont úgy működik, mint a hagyományos if, else.
Lehetőség van arra is, hogy az #if direktívával egy összetett kifejezést értékeltessünk ki.
Ebben az esetben a TEST és az A direktíva meglétét ellenőrizzük.
private void button2_Click(object sender, System.EventArgs e)
{
#if (TEST && A)
label2.Text = "TEST && A";
Az #elif használatával egy újabb ellenőrzést végezhetünk, melyre csak akkor kerül sor, ha az első #if nem teljesül.
#elif (TEST && !A)
label2.Text = "TEST && !A";
#endif
}
A direktívák között használhatjuk a ==, !=, &&, || logikai operátorokat és természetesen a definiáltság logikai értékének a megfordítására a ! jelet.
További direktívák is rendelkezésünkre állnak.
Például a #region és #endregion közé zárt forráskódhoz a forráskód szerkesztőben megjelenik egy kis mínusz jel, így ezt a részt mint egy külön hierarchia szintet becsukhatunk, kinyithatunk. A #region után megadhatunk egy nevet. Ez a név fogja reprezentálni a blokkot becsukott állapotban.
#region Buttons
private void button1_Click(object sender, System.EventArgs e)
{
...
}
#endregion
Arra is lehetőségünk van, hogy a program fordításakor hibaüzenetet, vagy figyelmeztető üzenetet generáljunk.
Ha a B direktíva nincs deklarálva, akkor az #error direktíva használatával egy hibaüzenetet generáltatunk, így az alkalmazásunkat a Visual Studio.NET nem is fordítja le, hanem ennél a sornál hibát jelezve megszakad. Az #error direktíva után egy tetszőleges szöveget megadhatunk, mely megjelenik hibaüzenetként.
public Form1()
{
#if !B
#error B nem definiált
#endif
Figyelmeztető üzenet generálásához a #warning direktívát kell használnunk, amely után szintén megadható egy tetszőleges szöveg, amely megjelenik a projekt fordításakor figyelmeztetésként. Lehetőségünk van a #warning és az #error esetében arra is, hogy megadjuk azt, hogy Task List-ben megjelenő üzenet mellett a fordító melyik állományt és annak hányadik sorát jelölje meg.
#line 1234 "ez a file name"
#warning figyelmeztetés
}