Latest web development tutorials

C # propriétés (attributs)

Caractéristiques (Attribut) est un programme de transfert de divers éléments (tels que les classes, les méthodes, les structures, les énumérations, les composants, etc.) dans le comportement d' exécution des informations de balise déclarative.Vous pouvez ajouter des informations déclaratives au programme en utilisant la fonction. Une étiquette de déclaration est appliquée en le plaçant devant les éléments entre crochets ([]) pour décrire.

Caractéristiques (attributs) pour ajouter des métadonnées, telles que les instructions de compilation et commentaires, la description, les méthodes, l'information supplémentaire et ainsi de suite. .Net Framework fournit deux types de fonctions: propriétésprédéfinieset des propriétéspersonnalisées.

propriétés prédéterminées (Attribut)

propriétés prédéterminées (Attribut) la syntaxe suivante:

[Attribut (positional_parameters, name_parameter = valeur, ...)]
élément

Caractéristiques (Attribut) les noms et les valeurs sont indiquées entre crochets, placé devant l'élément auquel il applique. positional_parameters prédéterminés informations nécessaires, name_parameter prédéterminées des informations facultatives.

attributs prédéfinis (d'attribut)

.Net Framework fournit trois attributs prédéfinis:

  • AttributeUsage
  • conditionnel
  • obsolète

AttributeUsage

Predefined attributsAttributeUsage décrit comment utiliser une classe d'attribut personnalisé.Il spécifie le type de propriétés peut être appliqué au projet.

Les dispositions de cette fonction a la syntaxe suivante:

[AttributeUsage (
   validon,
   AllowMultiple = AllowMultiple,
   = Héritée hérités
)]

dans lequel:

  • Validon paramètres des éléments de langage caractéristiques peuvent être placés prédéterminé. Il est une combinaison de la valeurderecenseurs. La valeur par défaut estAttributeTargets.All.
  • ParamètreAllowMultiple (enoption)fournit une valeur booléenne pour la propriété propriétéAllowMultiple(propriété). Si cela est vrai, alors cette fonction est plus utile. La valeur par défaut est faux (usage unique).
  • Paramètreshérités (enoption)fournit une valeur booléenne pour la propriété propriétéHérité(propriété). Si cela est vrai, cette propriété est une classe dérivée peut être héritée. La valeur par défaut est false (non héritée).

Par exemple:

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

conditionnel

Cette fonctionnalité marque une méthode de condition prédéfinie, sa mise en œuvre dépend de son identificateur de prétraitement.

Il fera la compilation conditionnelle des appels de méthode, en fonction de la valeur spécifiée tels queDebug ou Trace.Par exemple, la valeur de la variable est affichée lors du débogage du code.

Les dispositions de cette fonction a la syntaxe suivante:

[Conditionnelle (
   conditionalSymbol
)]

Par exemple:

[Conditionnel ( "DEBUG")]

L'exemple suivant illustre cette fonction:

DEBUG #define
using System;
using System.Diagnostics;
Myclass public class
{
    [Conditionnel ( "DEBUG")]
    Message public static void (string msg)
    {
        Console.WriteLine (msg);
    }
}
Class Test
{
    function1 static void ()
    {
        Myclass.Message ( "En fonction 1.");
        function2 ();
    }
    function2 static void ()
    {
        Myclass.Message ( "En fonction 2.");
    }
    public static void Main ()
    {
        Myclass.Message ( "Dans la fonction principale.");
        function1 ();
        Console.ReadKey ();
    }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

En fonction principale
En fonction 1
En fonction 2

obsolète

Les attributs prédéfinis marqués entités de programme ne devraient pas être utilisés. Il vous permet de dire au compilateur de jeter un élément de cible particulière. Par exemple, lorsqu'une nouvelle méthode est utilisée dans une classe, mais vous voulez toujours garder la classe dans l'ancienne méthode, vous pouvez afficher une nouvelle méthode doit être utilisée au lieu de l'ancienne méthode de message à marquer comme obsolètes (pas à jour a).

Les dispositions de cette fonction a la syntaxe suivante:

[Obsolete (
   message
)]
[Obsolete (
   message,
   iserror
)]

dans lequel:

  • messagedeparamètre,est une chaîne qui décrit le projet ainsi que les raisons pour lesquelles le jour ce qui utilise l'alternative.
  • Paramètresiserror,est une valeur booléenne. Si cela est vrai, le compilateur doit utiliser le projet comme une erreur. La valeur par défaut est false (le compilateur génère un avertissement).

L'exemple suivant illustre cette fonction:

using System;
Public class MyClass
{
   [Obsolete ( "Ne pas utiliser OldMethod, utilisez newMethod à la place", true)]
   static void OldMethod ()
   { 
      Console.WriteLine ( "Il est l'ancienne méthode");
   }
   NewMethod static void ()
   { 
      Console.WriteLine ( "Il est la nouvelle méthode"); 
   }
   public static void Main ()
   {
      OldMethod ();
   }
}

Lorsque vous essayez de compiler le programme, le compilateur donnera un message d'erreur indiquant:

 Ne pas utiliser OldMethod, utilisez newMethod place

Créer des attributs personnalisés (Attribut)

.Net Framework vous permet de créer des propriétés personnalisées pour stocker des informations déclaratives, et peut être récupéré à l'exécution. Cette information est basée sur des critères de conception et de l'application doit être associé à un élément cible.

Créer et fonctionnalités personnalisées d'utilisation comprennent quatre étapes:

  • Propriétés Déclaration sur mesure
  • Construisez Propriétés personnalisées
  • Appliquer des propriétés personnalisées sur l'élément de programme cible
  • Accès par les caractéristiques de réflexion

La dernière étape comprend écrire un programme simple à lire les métadonnées pour trouver les différents symboles. Les métadonnées sont des données et de l'information utilisée pour décrire d'autres données. Le programme devrait utiliser la réflexion pour accéder aux propriétés à l'exécution. Nous allons discuter de cela en détail dans le chapitre suivant.

Propriétés Déclaration sur mesure

Une nouvelle propriétés personnalisées qui découlent de la classeSystem.Attribute.Par exemple:

// BugFix un attribut personnalisé est affecté à la classe et ses membres [AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

DebugInfo public class: System.Attribute

Dans le code ci - dessus, nous avons déclaré un attribut personnalisé nomméDebugInfode.

Construisez Propriétés personnalisées

Laissez - nous construire un attribut personnalisé nomméDebugInfo,les informations seront stockées dans le débogueur de fonctionnalité obtenue. Il stocke les informations suivantes:

  • numéro de code d'erreur
  • Les développeurs reconnaissent le nom du bug
  • Date de la dernière révision du code
  • Un message de développeurs chaîne de magasins marquent

NosDebugInfotrois premières classes seront utilisés pour stocker trois informations privées de la propriété (propriété) et avec une propriété publique pour stocker des messages pour ( la propriété). positionnement Donc numéros de bogues nom du développeur et la date de l'examen devront classe DebugInfo (position) de paramètre, le message est un nom facultatif de paramètres (nommés).

Chaque propriété doit avoir au moins un constructeur. positionnement requis (position) des paramètres qui doivent être transmis par le constructeur. Le code suivant montre les catégoriesDebugInfo:

// BugFix un attribut personnalisé est affecté à la classe et ses membres [AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

DebugInfo public class: System.Attribute
{
  int Bugno privé;
  développeur de private string;
  lastReview private string;
  string message public;

  publique DebugInfo (int bg, string dev, chaîne d)
  {
      this.bugNo = bg;
      this.developer = dev;
      this.lastReview = d;
  }

  public int Bugno
  {
      obtenir
      {
          retour Bugno;
      }
  }
  public string développeur
  {
      obtenir
      {
          retour développeur;
      }
  }
  public string LastReview
  {
      obtenir
      {
          retour lastReview;
      }
  }
  public string message
  {
      obtenir
      {
          retourner un message;
      }
      ensemble
      {
          message = valeur;
      }
  }
}

Appliquer des propriétés personnalisées

En plaçant des propriétés immédiatement avant son objectif d'appliquer cette fonction:

[DebugInfo (45, "Zara Ali", "08/12/2012", Message = "Retour incompatibilité de type")]
[DebugInfo (49, "Nuha Ali", "10/10/2012", Message = "variable non utilisé")]
classe Rectangle
{
  // Les variables membres protégées longueur double;
  protégée à double largeur;
  Rectangle publique (double l, double w)
  {
      longueur = l;
      width = w;
  }
  [DebugInfo (55, "Zara Ali", "19/10/2012",
  Message = "Retour incompatibilité de type")]
  à double getArea publique ()
  {
      retour longueur * largeur;
  }
  [DebugInfo (56, "Zara Ali", "19/10/2012")]
  Affichage public void ()
  {
      Console.WriteLine ( "Longueur: {0}", longueur);
      Console.WriteLine ( "Largeur: {0}", largeur);
      Console.WriteLine ( "Zone: {0}", getArea ());
  }
}

Dans le chapitre suivant, nous allons utiliser l'objet de classe de réflexion pour récupérer ces informations.