Latest web development tutorials

C # proprietà (attributi)

Caratteristiche (attributo) è un programma per il trasferimento di vari elementi (come le classi, metodi, strutture, enumerazioni, componenti, etc.) nel comportamento in fase di esecuzione delle informazioni dei tag dichiarativa.È possibile aggiungere informazioni dichiarativa per il programma utilizzando la funzione. Un'etichetta istruzione viene applicata ponendolo di fronte gli elementi tra parentesi quadre ([]) per descrivere.

Caratteristiche (attributi) per aggiungere i metadati, come ad esempio le istruzioni di compilazione e commenti, descrizione, metodi, informazioni aggiuntive e così via. .Net Framework fornisce due tipi di caratteristiche: proprietàpredefinitee le proprietàpersonalizzate.

proprietà predeterminate (attributo)

proprietà predeterminate (attributo) la seguente sintassi:

[Attributo (positional_parameters, name_parameter = valore, ...)]
elemento

Caratteristiche nomi e valori (attributo) sono specificati tra parentesi quadre, collocato prima dell'elemento a cui si applica. positional_parameters predeterminati informazioni necessarie, name_parameter predeterminati informazioni facoltative.

attributi predefiniti (attributo)

.NET Framework fornisce tre attributi predefiniti:

  • AttributeUsage
  • condizionale
  • obsoleto

AttributeUsage

Predefiniti attributiAttributeUsage descrive come utilizzare una classe attributo personalizzato.Si specifica il tipo di proprietà può essere applicata al progetto.

Le disposizioni di questa funzione ha la seguente sintassi:

[AttributeUsage (
   validon,
   AllowMultiple = AllowMultiple,
   = Ereditati ereditato
)]

In cui:

  • Validon predeterminato parametri caratteristici elementi del linguaggio può essere collocato. Si tratta di una combinazione di valore di enumeratoriAttributeTargets.Il valore predefinito èAttributeTargets.All.
  • ParametroAllowMultiple (opzionale)fornisce un valore booleano per la proprietà immobiliAllowMultiple(proprietà). Se fosse vero, allora questa funzione è più utile. Il valore predefinito è falso (uso singolo).
  • Parametriereditato (opzionale)fornisce un valore booleano per la proprietàereditataproprietà (proprietà). Se fosse vero, questa struttura è una classe derivata può essere ereditata. Il valore predefinito è falso (non ereditata).

Ad esempio:

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

condizionale

Questa caratteristica rappresenta un metodo di condizione predefinita, la sua attuazione dipende dalla sua identificatore di pre-elaborazione superiore.

Esso causerà compilazione condizionale delle chiamate ai metodi, a seconda del valore specificato comeDebug o Trace.Ad esempio, viene visualizzato il valore della variabile durante il debug del codice.

Le disposizioni di questa funzione ha la seguente sintassi:

[Condizionale (
   conditionalSymbol
)]

Ad esempio:

[Condizionale ( "DEBUG")]

Il seguente esempio dimostra questa funzionalità:

DEBUG #define
using System;
using System.Diagnostics;
public class Myclass
{
    [Condizionale ( "DEBUG")]
    Messaggio pubblico static void (msg stringa)
    {
        Console.WriteLine (msg);
    }
}
class test
{
    function1 static void ()
    {
        Myclass.Message ( "In funzione 1.");
        function2 ();
    }
    function2 static void ()
    {
        Myclass.Message ( "In Funzione 2");
    }
    public static void Main ()
    {
        Myclass.Message ( "In funzione principale.");
        funzione1 ();
        Console.ReadKey ();
    }
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

In Funzione principale
In Funzione 1
In Funzione 2

obsoleto

Gli attributi predefiniti taggati entità del programma non dovrebbero essere usati. Esso consente di dire al compilatore di scartare un particolare elemento di destinazione. Ad esempio, quando un nuovo metodo viene utilizzato in una classe, ma ancora voglia di mantenere la classe nel vecchio metodo, è possibile visualizzare un nuovo metodo dovrebbe essere utilizzato al posto del vecchio metodo di messaggio per marcare come obsoleti (obsolete a).

Le disposizioni di questa funzione ha la seguente sintassi:

[Obsoleto (
   messaggio
)]
[Obsoleto (
   messaggio,
   ISERROR
)]

In cui:

  • messaggio del parametro,è una stringa che descrive il progetto e le ragioni per le quali l'obsoleto quali usi l'alternativa.
  • ParametriISERROR,è un valore booleano. Se fosse vero, il compilatore dovrebbe utilizzare il progetto come un errore. Il valore predefinito è falso (il compilatore genera un avviso).

Il seguente esempio dimostra questa funzionalità:

using System;
public class MyClass
{
   [Obsolete ( "Non usare OldMethod, utilizzare newMethod invece", true)]
   static void OldMethod ()
   { 
      Console.WriteLine ( "E 'il vecchio metodo");
   }
   NewMethod static void ()
   { 
      Console.WriteLine ( "E 'il nuovo metodo"); 
   }
   public static void Main ()
   {
      OldMethod ();
   }
}

Quando si tenta di compilare il programma, il compilatore darà un messaggio di errore:

 Non utilizzare OldMethod, utilizzare newMethod invece

Crea attributi personalizzati (attributo)

.Net Framework consente di creare proprietà personalizzate per la memorizzazione delle informazioni dichiarativa, e possono essere richiamati in fase di esecuzione. Questa informazione è basata su criteri di progettazione e l'applicazione deve essere associato a qualsiasi elemento di destinazione.

Creare e utilizzare funzioni personalizzate includono quattro fasi:

  • Proprietà Dichiarazione personalizzate
  • Costruzioni Proprietà personalizzate
  • Applicare le proprietà personalizzate sull'elemento programma di destinazione
  • L'accesso attraverso caratteristiche di riflessione

La fase finale prevede scrivere un semplice programma per leggere i metadati per trovare i vari simboli. I metadati sono dati e le informazioni utilizzate per descrivere altri dati. Il programma dovrebbe utilizzare la reflection per accedere alle proprietà in fase di esecuzione. Ne discuteremo in dettaglio nel prossimo capitolo.

Proprietà Dichiarazione personalizzate

Una nuova proprietà personalizzate che derivano dalla classeSystem.Attribute.Ad esempio:

// BugFix un attributo personalizzato viene assegnato alla classe e ai suoi membri [AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

Classe debuginfo pubblico: System.Attribute

Nel codice di cui sopra, abbiamo dichiarato un attributo personalizzato denominatodebuginfodi.

Costruzioni Proprietà personalizzate

Cerchiamo di costruire un attributo personalizzato denominatodebuginfo,le informazioni saranno memorizzate nel debugger funzione ottenuto. Memorizza le seguenti informazioni:

  • numero di codice di bug
  • Gli sviluppatori riconoscono il nome del bug
  • Data dell'ultima revisione del codice
  • Un sviluppatori di memorizzare un messaggio stringa segnano

I nostridebuginfoprime tre classi verranno utilizzati per memorizzare le informazioni private di tre proprietà (proprietà) e con una proprietà pubblica per memorizzare i messaggi di (proprietà). Così posizionamento numero di bug nome dello sviluppatore e la data del riesame saranno tenuti classe debuginfo (posizionale) parametro, il messaggio è un nome opzionale (nome) parametri.

Ogni proprietà deve avere almeno un costruttore. Richiesto posizionamento (posizione) il parametro che deve essere approvata dal costruttore. Il codice seguente illustra le categoriedebuginfo:

// BugFix un attributo personalizzato viene assegnato alla classe e ai suoi membri [AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

Classe debuginfo pubblico: System.Attribute
{
  private int Bugno;
  sviluppatore private string;
  stringa lastReview privato;
  messaggio public string;

  pubblico debuginfo (int bg, stringa dev, stringa d)
  {
      this.bugNo = bg;
      this.developer = dev;
      this.lastReview = d;
  }

  public int Bugno
  {
      ottenere
      {
          tornare Bugno;
      }
  }
  public string Developer
  {
      ottenere
      {
          tornare sviluppatore;
      }
  }
  public string LastReview
  {
      ottenere
      {
          tornare lastReview;
      }
  }
  public string Messaggio
  {
      ottenere
      {
          tornare messaggio;
      }
      set
      {
          messaggio = valore;
      }
  }
}

Applicare le proprietà personalizzate

Inserendo proprietà immediatamente prima il suo obiettivo di applicare questa funzionalità:

[Debuginfo (45, "Zara Ali", "2012/12/08", messaggio = "Return tipo non corrispondente")]
[Debuginfo (49, "Nuha Ali", "10/10/2012", messaggio = "variabile inutilizzata»)]
classe Rectangle
{
  // Variabili membro protetto lunghezza doppia;
  protetta larghezza doppia;
  Rettangolo pubblico (doppia L, doppia w)
  {
      lunghezza = l;
      width = w;
  }
  [Debuginfo (55, "Zara Ali", "19/10/2012",
  Messaggio = "Return tipo non corrispondente")]
  doppia getArea pubblico ()
  {
      tornare lunghezza larghezza *;
  }
  [Debuginfo (56, "Zara Ali", "19/10/2012")]
  Mostra public void ()
  {
      Console.WriteLine ( "Lunghezza: {0}", di lunghezza);
      Console.WriteLine ( "Larghezza: {0}", di larghezza);
      Console.WriteLine ( "Area: {0}", getArea ());
  }
}

Nel prossimo capitolo, useremo l'oggetto di classe di riflessione per recuperare queste informazioni.