Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Atribut Tersuai C#

Atribut Tersuai C#

王林
王林asal
2024-09-03 15:07:19987semak imbas

Semasa kita memahami apa itu atribut tersuai, kita mesti memahami atribut. Atribut ialah sambungan metadata yang akan memberikan maklumat tambahan kepada pengkompil C# tentang elemen dalam program C# pada masa jalan. Atribut ini digunakan untuk meletakkan syarat atau meningkatkan kebolehbacaan dan kecekapan kod. Terdapat begitu banyak atribut yang telah ditetapkan yang wujud dalam C# (C sharp), dan kami juga mempunyai kemudahan untuk mencipta atribut pengguna baharu yang dipanggil "atribut tersuai". Untuk mencipta kelas tersuai, kita mesti membina kelas daripada Sistem. Kelas atribut.

Bagaimanakah Atribut Tersuai berfungsi dalam C#?

Atribut tersuai C# berfungsi berdasarkan kelas pratakrif yang digunakan untuk membina. Kami akan melihat cara membuat atribut tersuai langkah demi langkah. Langkah untuk mencipta atribut tersuai:

Langkah #1

Dengan menggunakan teg AttributeUsageAttribute: Teg AttributeUsageAttribute yang digunakan untuk membina atribut. Teg ini juga digunakan untuk apakah atribut sasaran dan jika ini boleh diwarisi atau jika berbilang objek atau kejadian atribut itu boleh wujud. Tag AttributeUsageAttribute ini mempunyai 3 ahli utama

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

1. AttributeUsageAttribute(AttributeTargets.All): AttributeTargets.All menyatakan bahawa atribut boleh digunakan pada semua bahagian lain program manakala Atribut. Kelas akan menunjukkan bahawa ia harus digunakan pada kelas dan parameter AttributeTargets.Method kepada kaedah tersuai.

Sintaks:

AttributeUsageAttribute( AttributeTargets.All)

2. AttributeUsage(AttributeTargets.All, Inherited = false): Daripada AttributeUsageAttribute( AttributeTargets.All) ialah ahli yang diwarisi dan ia menunjukkan atribut tersuai mungkin diwarisi atau tidak. Inherited = false ialah nilai boolean sama ada benar/salah. Jika kita tidak menyatakan Inherited = true/false maka nilai lalainya adalah benar.

Sintaks:

AttributeUsage(AttributeTargets.All, Inherited = false)

3. AttributeUsage(AttributeTargets.Method, AllowMultiple = true): Daripada parameter AllowMultiple ini memberitahu kami jika terdapat lebih daripada satu objek atribut wujud atau tidak. Ia juga mengambil nilai boolean juga. Secara lalai nilai boolean ini adalah palsu.

Sintaks:

AttributeUsage(AttributeTargets.Method, AllowMultiple = true)

Langkah #2

1. Dengan mentakrifkan kelas atribut: Ini lebih atau serupa dengan definisi kelas biasa. Nama kelas adalah hujung konvensional dalam Atribut. Kelas atribut ini diwarisi daripada System. Kelas atribut.

Sintaks:

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

Langkah #3

1. Menentukan Sifat dan Pembina: Mentakrifkan pembina serupa dengan semua pembina kelas lain untuk menetapkan nilai lalai dan Sifat digunakan untuk mentakrifkan maklumat nama sambungan pangkalan data, maklumat statik, dsb.

Sintaks #1

public MyAttribute(dataType dataTypeValue)
{
this.dataTypeValue= dataTypeValue;
}
Nota: Atribut tersuai mempunyai sifat untuk mendapatkan dan menetapkan pembolehubah jenis data.

Sintaks #2

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

Contoh untuk Melaksanakan Atribut Tersuai C#

Di bawah adalah contoh yang dinyatakan:

Contoh #1

Atribut Tersuai dengan operator typeOf

Kod:

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

Output:

Atribut Tersuai C#

Contoh #2

Atribut tersuai dengan butiran Pekerja

Kod:

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

Output:

Atribut Tersuai C#

Contoh #3

Demonstrasi Atribut Tersuai

Kod:

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

Output:

Atribut Tersuai C#

Kesimpulan

Atribut tersuai dalam C# digunakan untuk menentukan pelaksanaan yang diisytiharkan digunakan dengan kelas. Kita boleh mencapai pelaksanaan atribut tersuai ini dalam 3 langkah, iaitu dengan menggunakan AttributeUsageAttribute, AttributeUsage (AttributeTargets.All, Inherited = false dan AttributeUsage (AttributeTargets.Method, AllowMultiple = true).

Atas ialah kandungan terperinci Atribut Tersuai C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Argumen Baris Perintah C#Artikel seterusnya:Argumen Baris Perintah C#