Maison > développement back-end > Tutoriel C#.Net > Attribut personnalisé C#

Attribut personnalisé C#

王林
Libérer: 2024-09-03 15:07:19
original
1067 Les gens l'ont consulté

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)
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

É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
}
Copier après la connexion

É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;
}
Copier après la connexion
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;}
}
Copier après la connexion

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));
}
}
Copier après la connexion

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());
}
}
Copier après la connexion

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();
}
}
Copier après la connexion

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!

Étiquettes associées:
source:php
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal