2009-09-11 15 views
11

Chcę użyć atrybutu warunkowego dla klasy lub więcej, czy jest coś, co daje taki efekt? Zasadniczo nie chcę, aby klasa była tam w trybie debugowania. Nie chcę też zawijać każdego połączenia w dyrektywie #if DEBUG.Czy istnieje atrybut warunkowy na poziomie klasy?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 

namespace NameSpace 
{ 
    [Conditional("Debug")] 
    public class ClassName 
    { 

     public ClassName() 
     { 
     } 
    } 
} 

Odpowiedz

10

Nie, nie ma. Atrybuty warunkowe nie powodują, że ich cele znikają same - po prostu powodują, że kompilator pomija obiekty docelowe.

Eric Lippert miał dzisiaj, jak to się dzieje, post on just this sort of thing. Przeczytaj i sprawdź, czy to wszystko ma dla ciebie większy sens.

Jeśli naprawdę chcesz pominąć samą klasę w trybie zwolnienia, użyj dyrektyw preprocesora - ale musisz zrobić to samo dla wszystkich dzwoniących. Jaką szkodę musi utrzymać klasa w trybie zwolnienia?

Czy to może być klasa w innym projekcie? Jeśli tak, to , a następnie można po prostu zastosować atrybut warunkowy do wszystkich metod, wtedy typ nie będzie potrzebny w trybie zwolnienia, więc można uniknąć wysyłki zespołu.

+1

Czy mogę pominąć wszystkich użytkowników tej klasy? –

+1

Jeśli ustawisz warunkowe na wszystkich * metodach * klasy, wtedy wszystkie połączenia zostaną usunięte, ale sama klasa nadal będzie budowana. –

+0

Więc wystąpienia klasy nadal będą tworzone i będą używać pamięci? –

0

Nie jestem pewien, jeśli dobrze rozumiem.

Ale jeśli dekorujesz wszystkie metody za pomocą ConditionalAttribute - to wszystko zostanie usunięte, gdy symbol nie będzie obecny. I dlatego, chociaż klasa jest dostępna do użytku, nie będzie żadnych metod w środowisku wykonawczym do jej użycia.

Nie jestem pewien, dlaczego chciałbyś wykluczyć klasę w zależności od symbolu? Czy możesz wyjaśnić scenariusz?

Powiązane problemy