czwartek, 20 października 2011

Atrybut Conditional

Czasami potrzebujemy aby jakaś metoda została wykonana w przypadku kiedy zajdzie odpowiednia zmiana w systemie użytkownika. Co prawa istnieje możliwość sprawdzania warunkiem if czy możliwe jest wywołanie metody, jednak to powoduje zwiększenie ilości kodu w metodzie.
Możemy tego uniknąć przez zastosowanie atrybutu Conditional.

Dodanie atrybutu Conditional do metody informuje kompilator, że odwołanie do metody nie powinno zostać skompilowane do języka MSIL dopóki symbol powiązany z atrybutem warunku nie zostanie zdefiniowany.
Dodając atrybut Conditional do atrybutu spowoduje że nie zostanie on dodany do metadanych, dopóki odpowiedni symbol powiązany z warunkiem nie zostanie zdefiniowany.
W jaki sposób możemy zdefiniować warunki?
  •  Opcje linii poleceń kompilatora (np. /define:DEBUG) 
  •  Zmienne środowiskowe (set DEBUG=1)
  •  W kodzie (#define DEBUG, #undef DEBUG)

Zobaczmy na prosty przykład:


Code:
using System;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            MyMethod();
            MyMethod2();
        }

        [Conditional("C1")]
        public static void MyMethod()
        {
            Console.WriteLine("Hello world");
        }

        [Conditional("C2")]
        public static void MyMethod2()
        {
            Console.WriteLine("Hello world");
        }
    }
}

Przykład dla linii poleceń kompilatora
We właściwościach projektu definiujemy:


Po wywołaniu otrzymamy na ekranie:


Dzieje się tak dlatego, iż tylko jeden symbol został zdefiniowany

Brak komentarzy:

Prześlij komentarz