Latest web development tutorials

Właściwości C # (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)

Określone właściwości (atrybutów) o następującej składni:

[Atrybut (positional_parameters, name_parameter = wartość, ...)]
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.

Predefiniowane atrybuty (atrybut)

Net Framework oferuje trzy predefiniowane atrybuty:

  • AttributeUsage
  • warunkowy
  • przestarzały

AttributeUsage

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:

  • Validon góry określone parametry charakterystyczne elementy językowe mogą być umieszczone. Jest to kombinacja wartości RachmistrzomAttributeTargets.Domyślną wartością jestAttributeTargets.All.
  • allowmultipleparametrów(opcjonalnie)zapewnia logiczną wartość dla własności nieruchomościAllowMultiple(mienia). Jeśli to prawda, to ta funkcja jest bardziej użyteczne. Wartością domyślną jest false (jednorazowego użytku).
  • Parametrydziedziczone (opcjonalnie)zapewnia logiczną wartośćodziedziczonegomajątku nieruchomości (własności). Jeśli to prawda, ta właściwość jest klasa pochodna może być dziedziczona. Wartością domyślną jest false (nie dziedziczone).

Na przykład:

[AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property, 
AllowMultiple = true)]

warunkowy

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

przestarzały

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:

  • Komunikat parametrjest ciągiem znaków, który opisuje projekt, jak również powody, dla których przestarzałe czego używa alternatywą.
  • ParametryISERROR,to wartość logiczna. Jeśli to prawda, że ​​kompilator powinien używać projekt jako pomyłkę. Wartością domyślną jest false (kompilator generuje ostrzeżenie).

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

Tworzenie niestandardowych atrybutów (atrybut)

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:

  • Właściwości komunikat niestandardowe
  • Budowanie Właściwości niestandardowe
  • Zastosuj właściwości niestandardowe na elemencie programu docelowego
  • Dostęp przez charakterystyki odbicia

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.

Właściwości komunikat niestandardowe

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.

Budowanie Właściwości niestandardowe

Budujmy niestandardowy atrybut o nazwieDeBugInfo,informacje będą przechowywane w debuggera funkcji otrzymanej. Przechowuje się następujące informacje:

  • Numer kodu błędu
  • Deweloperzy rozpoznać nazwę bug
  • Data ostatniego przeglądu kodu
  • A deweloperzy magazynu wiadomości ciąg oznaczyć

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;
      }
  }
}

Zastosuj właściwości niestandardowych

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ę.