Heim >Backend-Entwicklung >C#.Net-Tutorial >Benutzerdefiniertes C#-Attribut

Benutzerdefiniertes C#-Attribut

王林
王林Original
2024-09-03 15:07:191033Durchsuche

Während wir uns damit befassen, was ein benutzerdefiniertes Attribut ist, müssen wir Attribute verstehen. Attribute sind Metadatenerweiterungen, die dem C#-Compiler zur Laufzeit zusätzliche Informationen über Elemente im C#-Programm liefern. Diese Attribute werden verwendet, um Bedingungen festzulegen oder die Lesbarkeit und Effizienz des Codes zu erhöhen. Es gibt so viele vordefinierte Attribute in C# (Cs), und wir haben auch die Möglichkeit, neue Benutzerattribute zu erstellen, die als „benutzerdefinierte Attribute“ bezeichnet werden. Um die benutzerdefinierte Klasse zu erstellen, müssen wir die Klassen aus dem System erstellen. Attributklasse.

Wie funktionieren benutzerdefinierte Attribute in C#?

Das benutzerdefinierte C#-Attribut basiert auf vordefinierten Klassen, die zum Erstellen verwendet werden. Wir werden Schritt für Schritt untersuchen, wie die benutzerdefinierten Attribute erstellt werden. Schritte zum Erstellen des benutzerdefinierten Attributs:

Schritt #1

Durch Verwendung des AttributeUsageAttribute-Tags: Das AttributeUsageAttribute-Tag wird zum Erstellen des Attributs verwendet. Dieses Tag wird auch verwendet, um anzugeben, was die Zielattribute sind und ob diese vererbt werden können oder ob mehrere Objekte oder Instanzen des Attributs vorhanden sein können. Dieses AttributeUsageAttribute-Tag hat 3 primäre Mitglieder

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

1. AttributeUsageAttribute(AttributeTargets.All): AttributeTargets.All gibt an, dass das Attribut auf alle anderen Teile des Programms angewendet werden kann, während Attribute. Die Klasse gibt an, dass sie auf die Klasse und den AttributeTargets.Method-Parameter auf die benutzerdefinierte Methode angewendet werden soll.

Syntax:

AttributeUsageAttribute( AttributeTargets.All)

2. AttributeUsage(AttributeTargets.All, Inherited = false): Daher ist AttributeUsageAttribute( AttributeTargets.All) ein geerbtes Mitglied und gibt an, dass das benutzerdefinierte Attribut geerbt werden kann oder nicht. Inherited = false ist ein boolescher Wert, entweder wahr/falsch. Wenn wir Inherited = true/false nicht angegeben haben, ist der Standardwert true.

Syntax:

AttributeUsage(AttributeTargets.All, Inherited = false)

3. AttributeUsage(AttributeTargets.Method, AllowMultiple = true): Anhand dieses AllowMultiple-Parameters erfahren wir, ob mehr als ein Objekt des Attributs vorhanden ist oder nicht. Es nimmt auch den booleschen Wert an. Standardmäßig ist dieser boolesche Wert falsch.

Syntax:

AttributeUsage(AttributeTargets.Method, AllowMultiple = true)

Schritt #2

1. Durch Definieren der Attributklasse: Dies ähnelt mehr oder ähnlich der normalen Klassendefinition. Der Klassenname endet konventionell mit Attribut. Diese Attributklasse wurde von System geerbt. Attributklasse.

Syntax:

[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
public class MyAttributeDefinition: Attribute
{
//some logic or methods
}

Schritt #3

1. Definieren von Eigenschaften und Konstruktoren: Definieren eines Konstruktors ähnlich allen anderen Klassen. Konstruktoren zum Festlegen der Standardwerte und Eigenschaften werden zum Definieren von Datenbankverbindungsnameninformationen, statischen Informationen usw. verwendet.

Syntax #1

public MyAttribute(dataType dataTypeValue)
{
this.dataTypeValue= dataTypeValue;
}
Hinweis: Benutzerdefinierte Attribute verfügen über Eigenschaften zum Abrufen und Festlegen der Datentypvariablen.

Syntax #2

public dataType Properties
{
get {return this.dataTypeValue;}
set {this.value = presentValue;}
}

Beispiele zum Implementieren eines benutzerdefinierten C#-Attributs

Im Folgenden finden Sie die genannten Beispiele:

Beispiel #1

Benutzerdefiniertes Attribut mit typeOf-Operator

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

Ausgabe:

Benutzerdefiniertes C#-Attribut

Beispiel #2

Benutzerdefiniertes Attribut mit Mitarbeiterdetails

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

Ausgabe:

Benutzerdefiniertes C#-Attribut

Beispiel #3

Demonstration benutzerdefinierter Attribute

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

Ausgabe:

Benutzerdefiniertes C#-Attribut

Fazit

Benutzerdefiniertes Attribut in C# wird verwendet, um die verwendete deklarierte Implementierung mit Klassen zu definieren. Wir können diese benutzerdefinierte Attributimplementierung in drei Schritten erreichen, nämlich durch die Verwendung von AttributeUsageAttribute, AttributeUsage (AttributeTargets.All, Inherited = false und AttributeUsage (AttributeTargets.Method, AllowMultiple = true).

Das obige ist der detaillierte Inhalt vonBenutzerdefiniertes C#-Attribut. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:C#-BefehlszeilenargumenteNächster Artikel:C#-Befehlszeilenargumente