Latest web development tutorials

C # Eigenschaften (Attribute)

Merkmale (Attribute) ist ein Programm für die Übertragung verschiedener Elemente (wie zB Klassen, Methoden, Strukturen, Aufzählungen, Komponenten, etc.) im Laufzeitverhalten von deklarativen Tag - Informationen.Sie können mithilfe der Funktion deklarativen Informationen zum Programm hinzuzufügen. Ein Statement-Label, indem sie vor den Elementen in eckigen Klammern ([]) angewendet wird, zu beschreiben.

Merkmale (Attribute) Metadaten wie Compiler Anweisungen und Kommentare, Beschreibung, Methoden, zusätzliche Informationen und so weiter hinzuzufügen. .Net Framework bietet zwei Arten von Funktionen:vordefiniertenEigenschaften undbenutzerdefinierteEigenschaften.

Vorgegebene Eigenschaften (Attribute)

Vorgegebene Eigenschaften (Attribute) die folgende Syntax:

[Attribut (positional_parameters, name_parameter = Wert, ...)]
Element

Merkmale (Attribute) Namen und Werte sind in eckigen Klammern angegeben, vor dem Element platziert, auf die sie sich bezieht. positional_parameters notwendigen Informationen vorgegebenen, name_parameter optionale Informationen vorgegeben.

Vordefinierte Attribute (Attribut)

.NET Framework bietet drei vordefinierte Attribute:

  • Attributeusage
  • bedingt
  • veraltet

Attributeusage

Vordefinierte AttributeAttributeusage beschreibt , wie eine benutzerdefinierte Attributklasse zu verwenden.Sie legt die Art der Eigenschaften können auf das Projekt angewendet werden.

Die Bestimmungen dieser Funktion weist die folgende Syntax:

[Attributeusage (
   validon,
   AllowMultiple = AllowMultiple,
   Geerbte = geerbt
)]

wobei:

  • Validon vorbestimmten charakteristischen Parameter Sprachelemente platziert werden können. Es ist eine Kombination von EnumeratorenAttributeWert. Der Standardwert istAttributeTargets.All.
  • ParameterAllowMultiple (optional)bietet einen Booleschen Wert für die EigenschaftAllowMultipleEigenschaft (Eigentum). Wenn das stimmt, dann ist diese Funktion nützlicher. Der Standardwert ist false (single use).
  • Parametergeerbt (optional)einen Booleschen Wert für die EigenschaftgeerbtEigenschaft bietet (Eigentum). Wenn das stimmt, ist diese Eigenschaft eine abgeleitete Klasse vererbt werden kann. Der Standardwert ist false (nicht vererbt).

Zum Beispiel:

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

bedingt

Diese Funktion stellt eine vordefinierte Bedingung Methode, deren Umsetzung auf seiner oberen Vorverarbeitung Kennung abhängt.

Es wird die bedingte Kompilierung von Methodenaufrufen führen, je nach dem angegebenen Wert wieDebug oder Trace.Beispielsweise wird der Wert der Variablen angezeigt, wenn der Code debuggen.

Die Bestimmungen dieser Funktion weist die folgende Syntax:

[Conditional (
   conditionalSymbol
)]

Zum Beispiel:

[Conditional ( "DEBUG")]

Das folgende Beispiel zeigt diese Funktion:

#define DEBUG
using System;
using System.Diagnostics;
public class Myclass
{
    [Conditional ( "DEBUG")]
    public static void Nachricht (string msg)
    {
        Console.WriteLine (msg);
    }
}
class Test
{
    static void function1 ()
    {
        Myclass.Message ( "In-Funktion 1.");
        function2 ();
    }
    static void function2 ()
    {
        Myclass.Message ( "In Funktion 2.");
    }
    public static void Main ()
    {
        Myclass.Message ( "In Main-Funktion.");
        function1 ();
        Console.ReadKey ();
    }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

In Hauptfunktion
In Funktion 1
In Funktion 2

veraltet

Die vordefinierten Attribute markiert Programm Einheiten sollten nicht verwendet werden. Es ermöglicht Ihnen, den Compiler zu sagen, ein bestimmtes Zielelement zu verwerfen. Zum Beispiel, wenn eine neue Methode in einer Klasse verwendet wird, aber Sie wollen immer noch die Klasse in der alten Methode zu halten, können Sie eine neue Methode anzeigen soll anstelle der alten Methode der Nachricht verwendet werden, es als veraltet zu markieren (veraltet a).

Die Bestimmungen dieser Funktion weist die folgende Syntax:

[Obsolete (
   Nachricht
)]
[Obsolete (
   Nachricht,
   iserror
)]

wobei:

  • Parameter -Nachrichtist eine Zeichenfolge, die das Projekt sowie die Gründe beschrieben , warum die veraltete , was die Alternative verwendet.
  • Parameteriserror,ist ein boolescher Wert. Wenn das stimmt, sollte der Compiler das Projekt als Fehler verwenden. Der Standardwert ist false (der Compiler erzeugt eine Warnung).

Das folgende Beispiel zeigt diese Funktion:

using System;
public class MyClass
{
   [Obsolete ( "Verwenden Sie OldMethod nicht, verwenden NewMethod statt", true)]
   static void OldMethod ()
   { 
      Console.WriteLine ( "Es ist die alte Methode");
   }
   static void NewMethod ()
   { 
      Console.WriteLine ( "Es ist das neue Verfahren"); 
   }
   public static void Main ()
   {
      OldMethod ();
   }
}

Wenn Sie versuchen, das Programm zu kompilieren, wird der Compiler eine Fehlermeldung besagt:

 Verwenden Sie OldMethod nicht, verwenden Sie NewMethod statt

Erstellen Sie benutzerdefinierte Attribute (Attribut)

.Net Framework können Sie benutzerdefinierte Eigenschaften zum Speichern von deklarativen Informationen zu erstellen, und können zur Laufzeit abgerufen werden. Die Angaben stützen sich auf Design-Kriterien und die Anwendung muss mit jedem Zielelement zugeordnet werden.

Erstellen und Verwenden von benutzerdefinierten Funktionen gehören vier Schritten:

  • Statement Benutzerdefinierte Eigenschaften
  • Bauen Sie Benutzerdefinierte Eigenschaften
  • Wenden Sie benutzerdefinierte Eigenschaften auf dem Zielprogrammelement
  • Zugang über den Reflexionseigenschaften

Der letzte Schritt beinhaltet ein einfaches Programm schreiben, um die Metadaten zu lesen, die verschiedenen Symbole zu finden. Metadaten sind Daten und Informationen verwendet, um andere Daten zu beschreiben. Das Programm sollte Reflexion für den Zugriff auf Eigenschaften zur Laufzeit verwenden. Wir werden dies im Detail im nächsten Kapitel erörtern.

Statement Benutzerdefinierte Eigenschaften

Eine neue benutzerdefinierte Eigenschaften vonSystem.Attribute Klasse abgeleitet werden.Zum Beispiel:

// BugFix ein benutzerdefiniertes Attribut wird der Klasse zugewiesen und ihre Mitglieder [Attributeusage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class debuginfo: System.Attribute

In dem obigen Code haben wir ein benutzerdefiniertes Attribut namensdebuginfovon erklärt.

Bauen Sie Benutzerdefinierte Eigenschaften

Lassen Sie uns ein benutzerdefiniertes Attribut bauen namensdebuginfo,werden die Informationen in der Feature - Debugger erhalten gespeichert werden. Er speichert die folgenden Informationen:

  • Bug-Codenummer
  • Entwickler erkennen den Namen des Fehlers
  • Datum der letzten Überprüfung des Codes
  • Ein String-Nachrichtenspeicher Entwickler markieren

Unseredebuginfoersten drei Klassen verwendet werden , um drei Privateigentum , Informationen zu speichern (Eigentum) und mit einer öffentlichen Eigenschaft zum Speichern von Nachrichten für (Eigentum). So Bug Zahlen Entwickler Name und das Datum der Überprüfung wird benötigt, Positionierung debuginfo Klasse (Positions) Parameter ist die Nachricht ein optionaler Name (Namen) Parameter.

Jede Eigenschaft muss mindestens einen Konstruktor haben. Erforderliche Positionierung (Positions) Parameter, der durch den Konstruktor übergeben werden sollte. Der folgende Code demonstriertdebuginfoKategorien:

// BugFix ein benutzerdefiniertes Attribut wird der Klasse zugewiesen und ihre Mitglieder [Attributeusage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class debuginfo: System.Attribute
{
  private int Bugno;
  private string Entwickler;
  private string lastReview;
  public string Nachricht;

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

  public int Bugno
  {
      erhalten
      {
          Rückkehr Bugno;
      }
  }
  public string Entwickler
  {
      erhalten
      {
          Rückkehr Entwickler;
      }
  }
  public string LastReview
  {
      erhalten
      {
          Rückkehr lastReview;
      }
  }
  public string Nachricht
  {
      erhalten
      {
          Rückmeldung;
      }
      Set
      {
          message = Wert;
      }
  }
}

Tragen Sie benutzerdefinierte Eigenschaften

Durch die Platzierung Eigenschaften unmittelbar vor ihrem Ziel diese Funktion anwenden:

[Debuginfo (45, "Zara Ali", "2012.12.08", Message = "Return type mismatch")]
[Debuginfo (49, "Nuha Ali", "10.10.2012", Message = "Nicht verwendete Variable")]
Klasse Rectangle
{
  // Member Variablen doppelter Länge geschützt;
  doppelte Breite geschützt;
  public Rectangle (Doppel l, Doppel w)
  {
      Länge = l;
      width = w;
  }
  [Debuginfo (55, "Zara Ali", "19.10.2012",
  Message = "Return type mismatch")]
  public double GetArea ()
  {
      Rückkehr Länge * Breite;
  }
  [Debuginfo (56, "Zara Ali", "19.10.2012")]
  public void Display ()
  {
      Console.WriteLine ( "Länge: {0}", Länge);
      Console.WriteLine ( "Breite: {0}", Breite);
      Console.WriteLine ( "Area: {0}", GetArea ());
  }
}

Im nächsten Kapitel werden wir die Reflection-Klasse-Objekt verwenden diese Informationen abzurufen.