Najlepszy samouczek Właściwości C # (atrybut) W 2024 r. W tym samouczku możesz dowiedzieć się Określone właściwości (atrybutów),Predefiniowane atrybuty (atrybut),Tworzenie niestandardowych atrybutów (atrybut),
Charakterystyka (Atrybut) to program do przenoszenia różnych elementów (takich jak klas, metod, struktur, wyliczeń, komponentów itp) w zachowaniu run-time deklaratywnej informacji znacznika.Możesz dodać deklaratywny informacji do programu za pomocą funkcji. Etykieta jest instrukcja, umieszczając go przed elementami w nawiasach kwadratowych ([]) w celu opisania.
Charakterystyka (atrybut), aby dodać metadane, takie jak instrukcje kompilatora i komentarze, opis metod, dodatkowe informacje i tak dalej. Net Framework udostępnia dwa rodzaje funkcji:predefiniowanychwłaściwości i właściwościniestandardowych.
Określone właściwości (atrybutów) o następującej składni:
[Atrybut (positional_parameters, name_parameter = wartość, pl.)] element
Charakterystyka (atrybut) nazwy i wartości są podane w nawiasach kwadratowych, umieszczone przed elementem, do których ma ona zastosowanie. positional_parameters określona niezbędnych informacji, name_parameter góry określone informacje opcjonalne.
Net Framework oferuje trzy predefiniowane atrybuty:
Predefiniowane atrybutyAttributeUsage opisuje jak użyć klasy atrybutu niestandardowego.Określa typ właściwości mogą być stosowane w projekcie.
Przepisy tej funkcji ma następującą składnię:
[AttributeUsage ( validon, AllowMultiple = allowmultiple, Odziedziczone = dziedziczone )]
w którym:
Na przykład:
[AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
Funkcja ta wyznacza predefiniowany metodę stanie, jego realizacja zależy od jego górnej identyfikatora przebiegu wyprzedzającego.
Spowoduje to warunkową kompilację wywołań metod, w zależności od określonej wartości, takich jaktestowanie ani śladu.Na przykład, zostanie wyświetlona wartość zmiennej podczas debugowania kodu.
Przepisy tej funkcji ma następującą składnię:
[Warunkowe ( conditionalSymbol )]
Na przykład:
[Warunkowe ( "DEBUG")]
Poniższy przykład demonstruje tę funkcję:
#define DEBUG using System; stosując System.Diagnostics; public class MojaKlasa { [Warunkowe ( "DEBUG")] public static void Message (MSG łańcuch) { Console.WriteLine (msg); } } Klasa kontrolna { void Function1 () { Myclass.Message ( "funkcja 1."); function2 (); } void function2 () { Myclass.Message ( "W 2. Funkcja"); } public static void main () { Myclass.Message ( "W funkcji głównej."); Function1 (); Console.ReadKey (); } }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
W funkcji Main W Funkcja 1 W Funkcja 2
Predefiniowane atrybuty oznaczone podmioty programu nie powinny być stosowane. To pozwala poinformować kompilator, aby odrzucić konkretny element docelowy. Na przykład, kiedy nowa metoda jest stosowana w klasie, ale nadal chcesz zachować klasę w starym sposobem, można wyświetlić nowa metoda powinna być stosowana zamiast starej metody przekazu, aby oznaczyć go jako przestarzałe (nieaktualne a).
Przepisy tej funkcji ma następującą składnię:
[Nieaktualne ( wiadomość )] [Nieaktualne ( komunikatu ISERROR )]
w którym:
Poniższy przykład demonstruje tę funkcję:
using System; public class MojaKlasa { [Nieaktualne ( "Nie używaj OldMethod użyć NewMethod zamiast", true)] void OldMethod () { Console.WriteLine ( "To jest stara metoda"); } void NewMethod () { Console.WriteLine ( "To nowa metoda"); } public static void main () { OldMethod (); } }
Podczas próby skompilować program, kompilator daje komunikat o błędzie z informacją:
Nie używaj OldMethod, zamiast używać NewMethod
Net Framework umożliwia tworzenie niestandardowych właściwości do przechowywania informacji deklaratywne i mogą być pobierane w czasie wykonywania. Dane opierają się na kryteriach projektowych i wymaga stosowania się być związane z jakimkolwiek elementem docelowym.
Tworzenie i używanie niestandardowych funkcje obejmują cztery etapy:
Końcowy etap obejmuje napisać prosty program do odczytywania metadanych znaleźć różne symbole. Metadane to dane i informacje używane do opisania innych danych. Program powinien użyć refleksji uzyskać dostęp do właściwości w czasie wykonywania. Omówimy to szczegółowo w następnym rozdziale.
A nowe właściwości niestandardowe, które będą uzyskiwane z klasySystem.Attribute.Na przykład:
// Bugfix atrybut niestandardowy jest przypisany do klasy i jej członków [AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] public class DeBugInfo: System.Attribute
W powyższym kodzie, mamy zadeklarowane niestandardowy atrybut o nazwieDeBugInfor.
Budujmy niestandardowy atrybut o nazwieDeBugInfo,informacje będą przechowywane w debuggera funkcji otrzymanej. Przechowuje się następujące informacje:
NaszeDeBugInfoPierwsze trzy klasy zostaną wykorzystane do przechowywania prywatnych informacji trzy nieruchomości (nieruchomości) oraz z własności publicznej do przechowywania wiadomości dla (mienia). Więc będzie wymagane numery błędów nazwisko autora i data przeglądu pozycjonowanie klasy DeBugInfo (pozycyjne) parametr, komunikat jest opcjonalną nazwę (nazwane) parametry.
Każda nieruchomość musi mieć przynajmniej jeden konstruktor. Wymagane pozycjonowanie (pozycyjne) parametr, który powinien zostać przyjęty przez konstruktora. Poniższy kod demonstruje kategorieDeBugInfo:
// Bugfix atrybut niestandardowy jest przypisany do klasy i jej członków [AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] public class DeBugInfo: System.Attribute { private int Bugno; prywatny deweloper ciąg; prywatne lastReview ciąg; Komunikat public string; publicznego DeBugInfo (int bg, ciąg dev, string d) { this.bugNo = bg; this.developer = dev; this.lastReview = d; } public int Bugno { dostać { powrót Bugno; } } public string Twórca { dostać { powrót dewelopera; } } public string LastReview { dostać { powrót lastReview; } } public string Message { dostać { komunikat zwrotny; } zestaw { message = value; } } }
Poprzez umieszczenie właściwości bezpośrednio przed jej cel, aby zastosować tę funkcję:
[DeBugInfo (45 "Zara Ali", "08.12.2012" Message = "Return typu niedopasowanie")] [DeBugInfo (49 "Nuha Ali", "10.10.2012" Message = "Nieużywane zmienna")] klasy Rectangle { // Zmienne użytkownika chroniony podwójną długość; zabezpieczone podwójną szerokość; Prostokąt publicznych (podwójne l dwukrotnie w) { długość = l; width = w; } [DeBugInfo (55 "Zara Ali", "19/10/2012" Message = "Return typu niedopasowanie")] public double GetArea () { Zwraca długość * szerokość; } [DeBugInfo (56 "Zara Ali", "19/10/2012")] public void Display () { Console.WriteLine ( "Czas trwania: {0}", długość); Console.WriteLine ( "Szerokość: {0}", szerokość); Console.WriteLine ( "Obszar: {0}", GetArea ()); } }
W następnym rozdziale będziemy używać obiektu klasy Odbicie pobrać tę informację.