Thuộc tính (attributes) trong C# cho phép bạn thêm metadata vào các thành phần của chương trình như lớp, phương thức, thuộc tính, và nhiều hơn nữa. Metadata này có thể được sử dụng để kiểm soát hành vi của chương trình tại runtime hoặc để cung cấp thông tin bổ sung cho công cụ và trình biên dịch.
1. Định nghĩa thuộc tính
Để định nghĩa một thuộc tính tùy chỉnh, bạn cần tạo một lớp kế thừa từ System.Attribute
. Ví dụ:
using System;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyCustomAttribute : Attribute
{
public string Description { get; }
public int Version { get; }
public MyCustomAttribute(string description, int version)
{
Description = description;
Version = version;
}
}
AttributeUsage
xác định những thành phần nào có thể được áp dụng thuộc tính này (class, method, etc.).- Các thuộc tính của
MyCustomAttribute
nhưDescription
vàVersion
được thiết lập thông qua constructor.
2. Áp dụng thuộc tính
Bạn có thể áp dụng thuộc tính tùy chỉnh của mình vào các thành phần của chương trình:
[MyCustomAttribute("This is a custom attribute", 1)]
public class MyClass
{
[MyCustomAttribute("This is a method with custom attribute", 2)]
public void MyMethod()
{
Console.WriteLine("Hello, World!");
}
}
3. Sử dụng thuộc tính
Để truy cập và sử dụng các thuộc tính đã áp dụng, bạn có thể sử dụng Reflection:
using System;
using System.Reflection;
public class Program
{
public static void Main()
{
Type type = typeof(MyClass);
// Lấy các thuộc tính áp dụng cho lớp
object[] classAttributes = type.GetCustomAttributes(false);
foreach (var attribute in classAttributes)
{
MyCustomAttribute myAttr = attribute as MyCustomAttribute;
if (myAttr != null)
{
Console.WriteLine($"Class Attribute - Description: {myAttr.Description}, Version: {myAttr.Version}");
}
}
// Lấy các thuộc tính áp dụng cho phương thức
MethodInfo method = type.GetMethod("MyMethod");
object[] methodAttributes = method.GetCustomAttributes(false);
foreach (var attribute in methodAttributes)
{
MyCustomAttribute myAttr = attribute as MyCustomAttribute;
if (myAttr != null)
{
Console.WriteLine($"Method Attribute - Description: {myAttr.Description}, Version: {myAttr.Version}");
}
}
}
}
4. Các thuộc tính dựng sẵn trong C#
C# cung cấp nhiều thuộc tính dựng sẵn mà bạn có thể sử dụng ngay lập tức:
-
[Obsolete]
: Đánh dấu phương thức hoặc lớp đã lỗi thời và sẽ đưa ra cảnh báo khi sử dụng.[Obsolete("This method is obsolete. Use NewMethod instead.")] public void OldMethod() { // ... }
-
[Serializable]
: Đánh dấu một lớp có thể được tuần tự hóa.[Serializable] public class MySerializableClass { // ... }
-
[DllImport]
: Được sử dụng trong P/Invoke để nhập một hàm từ một DLL không quản lý.[DllImport("user32.dll")] public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
Tổng kết
Thuộc tính trong C# là một công cụ mạnh mẽ để thêm metadata vào các thành phần của chương trình. Bạn có thể định nghĩa thuộc tính tùy chỉnh, áp dụng chúng và sử dụng Reflection để truy xuất chúng tại runtime. C# cũng cung cấp nhiều thuộc tính dựng sẵn hữu ích để giúp bạn kiểm soát hành vi của chương trình và cải thiện mã của mình.
Comments