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.
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:
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
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)
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 }
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; }
Sintaks #2
public dataType Properties { get {return this.dataTypeValue;} set {this.value = presentValue;} }
Di bawah adalah contoh yang dinyatakan:
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 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:
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 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!