Maison  >  Article  >  développement back-end  >  Attribut personnalisé C#

Attribut personnalisé C#

王林
王林original
2024-09-03 15:07:191006parcourir

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.

Comment fonctionne l'attribut personnalisé en C# ?

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é :

Étape n°1

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

  • AttributeUsageAttribute( AttributeTargets.All)
  • AttributeUsage(AttributeTargets.All, Inherited = false)
  • AttributeUsage(AttributeTargets.Method, AllowMultiple = true)

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)

Étape n°2

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
}

Étape n°3

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

Exemples d'implémentation d'un attribut personnalisé C#

Voici les exemples mentionnés :

Exemple n°1

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é C#

Exemple n°2

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 :

Attribut personnalisé C#

Exemple #3

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 :

Attribut personnalisé C#

Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn