Maison >développement back-end >Tutoriel C#.Net >Attribut personnalisé C#
Pendant que nous abordons ce qu'est un attribut personnalisé, nous devons comprendre les attributs. Les attributs sont des extensions de métadonnées qui fourniront des informations supplémentaires au compilateur C# sur les éléments du programme C# au moment de l'exécution. Ces attributs sont utilisés pour poser des conditions ou augmenter la lisibilité et l'efficacité du code. Il existe de nombreux attributs prédéfinis en C# (C Sharp), et nous avons également la possibilité de créer de nouveaux attributs utilisateur appelés « attributs personnalisés ». Pour créer la classe personnalisée, nous devons construire les classes à partir du System. Classe d'attribut.
L'attribut personnalisé C# fonctionne sur la base de classes prédéfinies utilisées pour la construction. Nous verrons étape par étape comment créer les attributs personnalisés. Étapes de création de l'attribut personnalisé :
En utilisant la balise AttributeUsageAttribute : balise AttributeUsageAttribute utilisée pour construire l'attribut. Cette balise est également utilisée pour savoir quels sont les attributs cibles et si ceux-ci peuvent être hérités ou si plusieurs objets ou instances de l'attribut peuvent exister. Cette balise AttributeUsageAttribute a 3 membres principaux
1. AttributeUsageAttribute(AttributeTargets.All) : AttributeTargets.All spécifie que l'attribut peut être appliqué à toutes les autres parties du programme alors que Attribute. La classe indiquera qu'elle doit s'appliquer à la classe et le paramètre AttributeTargets.Method à la méthode personnalisée.
Syntaxe :
AttributeUsageAttribute( AttributeTargets.All)
2. AttributeUsage(AttributeTargets.All, Inherited = false) : De cet AttributeUsageAttribute( AttributeTargets.All) est un membre hérité et il indique que l'attribut personnalisé peut être hérité ou non. Inherited = false est une valeur booléenne vraie/faux. Si nous n'avons pas spécifié Inherited = true/false alors la valeur par défaut est true.
Syntaxe :
AttributeUsage(AttributeTargets.All, Inherited = false)
3. AttributeUsage(AttributeTargets.Method, AllowMultiple = true) : De ce paramètre AllowMultiple nous indique s'il existe ou non plus d'un objet de l'attribut. Il prend également la valeur booléenne. Par défaut, cette valeur booléenne est fausse.
Syntaxe :
AttributeUsage(AttributeTargets.Method, AllowMultiple = true)
1. En définissant la classe d'attributs : C'est plus ou similaire à la définition de classe normale. Le nom de la classe est conventionnel et se termine par Attribut. Cette classe d'attributs héritée de System. Classe d'attribut.
Syntaxe :
[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)] public class MyAttributeDefinition: Attribute { //some logic or methods }
1. Définition des propriétés et des constructeurs : Définition d'un constructeur similaire à tous les autres constructeurs de classes pour définir les valeurs par défaut et les propriétés sont utilisées pour définir les informations sur le nom de connexion à la base de données, les informations statiques, etc.
Syntaxe n°1
public MyAttribute(dataType dataTypeValue) { this.dataTypeValue= dataTypeValue; }Remarque : Les attributs personnalisés ont des propriétés permettant d'obtenir et de définir les variables de type de données.
Syntaxe #2
public dataType Properties { get {return this.dataTypeValue;} set {this.value = presentValue;} }
Voici les exemples mentionnés :
Attribut personnalisé avec l'opérateur typeOf
Code :
// including packages using System; using System.Reflection; using System.Collections.Generic; // Creating a custom class from Attribute class class CustomAttribute : Attribute { // private variables declaration private string name; private string company; //parameterized class CustomAttribute constuctor public CustomAttribute(string name, string company) { this.name = name; this.company = company; } // method to display the fields by using reflection class public static void AttributeDisplay(Type classType) { Console.WriteLine("All the Methods of the class {0} are", classType.Name); //methods of the class for store all the attribute values MethodInfo[] methods = classType.GetMethods(); //looping through method attribute values by using for loop for (int i = 0; i < methods.GetLength(0); i++) { //create the array to recieve all the custom attribute values object[] attributesArray = methods[i].GetCustomAttributes(true); // foreach loop to read the values through all attributes of the method foreach(Attribute item in attributesArray) { if (item is CustomAttribute) { //display the custom attribute values CustomAttribute attributeObject = (CustomAttribute)item; Console.WriteLine("{0} - {1}, {2} ", methods[i].Name, attributeObject.name, attributeObject.company); } } } } } //Employer class to create employer fields class Employer { //employer fields declaration int employeeID; string name; //Parameterized Employer class constructor public Employer(int eID, string name) { this.employeeID = eID; this.name = name; } // Applying the custom attribute for CustomAttribute for the getId method [CustomAttribute("Accessor Values", "Generates employee ID")] public int getEmployeeID() { return employeeID; } // Applying the custom attribute to CustomAttribute for the getName method [CustomAttribute("Accessor Values", "Generates employee ID")] public string getName() { return name; } } //create employee class class Employee { //Declaring variables of Employee int employeeID; string name; //Parameterized Employee constructor public Employee(int eID, string name) { this.employeeID = eID; this.name = name; } // Applying the custom attribute CustomAttribute for the getEmployeeID method [CustomAttribute("Accessor Values", "Generates employee ID")] public int getEmployeeID() { return employeeID; } // Applying the custom attribute CustomAttribute for the getName method [CustomAttribute("Accessor Values", "Generates employee ID")] public string getName() { return name; } } //create a class for display the output public class Program { // main method for the application public static void Main(string[] args) { //calling static method for display typeOf employer class CustomAttribute.AttributeDisplay(typeof(Employer)); Console.WriteLine(); //calling static method for display typeOf employee class CustomAttribute.AttributeDisplay(typeof(Employee)); } }
Sortie :
Attribut personnalisé avec les détails de l'employé
Code :
using System; [AttributeUsage(AttributeTargets.All)] class CustomAttribute : Attribute { private string name; private string designation; // Constructor public CustomAttribute(string name, string designation) { this.name = name; this.designation = designation; } // setters and getters public string Name { get { return name; } } // property to get designation public string Action { get { return designation; } } } class Employee { private int empID; private string empName; private double salary; [CustomAttribute("Modifier", "Assigns the Employee Details")] public void setDetails(int id,string name, double sal) { empID = id; empName = name; salary=sal; } [CustomAttribute("It is an Accessor", "Displays empID")] public int getEmpID() { return empID; } [CustomAttribute("It is an Accessor", "Displays empID")] public string getEmpName() { return empName; } [CustomAttribute("It is an Accessor", "Displays empID")] public double getSalary() { return salary; } } public class EmployeeDetailsOut { // main method for run the application //main method modifier must be public public static void Main(string[] args) { Employee emp = new Employee(); emp.setDetails(2424, "Paramesh", 400000.00); Console.WriteLine("Employee Details"); Console.WriteLine("Employee ID Number : " + emp.getEmpID()); Console.WriteLine("Employee Name : " + emp.getEmpName()); Console.WriteLine("Employee Salary : " + emp.getSalary()); Console.WriteLine("\n"); Employee emp1 = new Employee(); emp1.setDetails(2423, "Amardeep", 600000.00); Console.WriteLine("Employee Details"); Console.WriteLine("Employee ID Number : " + emp1.getEmpID()); Console.WriteLine("Employee Name : " + emp1.getEmpName()); Console.WriteLine("Employee Salary : " + emp1.getSalary()); } }
Sortie :
Démonstration d'attribut personnalisé
Code :
using System; using System.Diagnostics; public class DemonstrationOfCustomAttribute { [Conditional("DEBUG")] public static void getMyOut(string msg) { Console.WriteLine(msg); } } public class Test { static void firstMethod() { DemonstrationOfCustomAttribute.getMyOut("I am first method."); secondMethod(); } static void secondMethod() { DemonstrationOfCustomAttribute.getMyOut("I am second method."); } public static void Main() { DemonstrationOfCustomAttribute.getMyOut("I am in main method."); firstMethod(); } }
Sortie :
L'attribut personnalisé en C# est utilisé pour définir l'implémentation déclarée utilisée avec les classes. Nous pouvons réaliser cette implémentation d'attribut personnalisé en 3 étapes, c'est-à-dire en utilisant AttributeUsageAttribute, AttributeUsage (AttributeTargets.All, Inherited = false et AttributeUsage (AttributeTargets.Method, AllowMultiple = true).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!