- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
[C#] Sử dụng Attribute Annotation trong lập trình C# CSharp
Tìm hiểu về Annotation, các tạo ra Attribute và sử dụng Annotation trong ví dụ C# đơn giản, áp dụng Data Annotation để kiểm tra dữ liệu lớp.
[C#] Sử dụng Attribute Annotation trong lập trình C# CSharp
Khái niệm về Annotation (Attribute)
Một chú thích (Annotation) tác động một thành phần nào đó của chương trình (lớp, phương thức, thuộc tính) nó là một phần của siêu dữ liệu
(metadata - loại dữ liệu cung cấp thông tin về dữ liệu khác). Annotation giúp thêm thông tin vào lớp, phương thức, thuộc tính những đoạn code mở rộng. Tính năng này trong Java gọi là Annotation, trong C# gọi là Attribute.
Trong C# có định nghĩa sẵn vô số các Attribute, để sử dụng nó bạn chỉ cần viết tên Attribute trong dấu []
trước đối tượng áp dụng như lớp, phương thức, thuộc tính lớp (có tham số như hàm, nếu Attribute đó yêu cầu).
[AttributeName(param1, param2 ...)]
Ví dụ: trong C# có thuộc tính Obsolete
, để đánh dấu một phương thức, lớp ... nào đó là lạc hậu.
using System;
namespace DataAnnotation
{
public class MyClass {
[Obsolete("Phương thức này lỗi thời, hãy dùng phương thức Abc")] // Đánh dấu phương thức Method1 lạc hậu
public static void Method1() {
Console.WriteLine("Phương thức chạy");
}
}
class Program
{
static void Main(string[] args)
{
MyClass.Method1();
}
}
}
Kết quả là khi soạn code, hay khi biên dịch sẽ có cảnh báo.
Tự tạo Attribute C#
Để tạo Attribute riêng khá đơn giản, bạn chỉ việc tạo một lớp kế thừ từ System.Attribute
. Tuy nhiên để sử dụng được trước tiên cần thành thạo kỹ thuật Reflection
trong C#. Ở mức độ đơn giản, hãy tìm hiểu và sử dụng Type
tại Đọc thuộc tính lớp với Type .
Giờ thử thực hành tạo một Attribute riêng đặt tên là MotaAttribute
, thuộc tính này để bạn thêm thông tin mô tả nào đó (string) cho thành phần áp dụng (như lớp, thuộc tính, phương thức)
using System;
namespace DataAnnotation.Attributes
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Method)]
public class MotaAttribute : Attribute // có thể đặt tên Mota thay cho MotaAttribute
{
public MotaAttribute(string v) => Description = v;
public string Description {set; get;}
}
}
Trong định nghĩa trên, AttributeUsage()
là để thiết lập thuộc tính Mota
áp dụng được cho những thành phần nào, như có AttributeTargets.Property
nghĩa là được phép áp dụng cho các thuộc tính lớp.
Như vậy bạn đã tạo được một thuộc tính Mota, áp dụng cho đối tượng nào thì chỉ cần viết
[Mota("mô tả gì đó")]
Áp dụng Attribute Mota
using System;
using DataAnnotation.Attributes;
namespace DataAnnotation
{
[Mota("Lớp biểu diễn người dùng")] // thêm Attribute cho lớp
public class User
{
[Mota("Thuộc tính lưu tuổi")] // thêm Attribute cho thuộc tính lớp
public int age {set; get;}
[Mota("Phương thức này hiện thị age")] // thêm Attribute cho phương thức
public void ShowAge()
{
}
}
class Program
{
static void Main(string[] args)
{
var a = new User();
// Đọc các Attribute của lớp
foreach (Attribute attr in a.GetType().GetCustomAttributes(false))
{
MotaAttribute mota = attr as MotaAttribute;
if (mota != null)
{
Console.WriteLine($"{a.GetType().Name,10} : {mota.Description}");
}
}
// Đọc Attribute của từng thuộc tính lớp
foreach (var thuoctinh in a.GetType().GetProperties())
{
foreach (Attribute attr in thuoctinh.GetCustomAttributes(false))
{
MotaAttribute mota = attr as MotaAttribute;
if (mota != null)
{
Console.WriteLine($"{thuoctinh.Name,10} : {mota.Description}");
}
}
}
// Đọc Attribute của phương thức
foreach (var m in a.GetType().GetMethods())
{
foreach (Attribute attr in m.GetCustomAttributes(false))
{
MotaAttribute mota = attr as MotaAttribute;
if (mota != null)
{
Console.WriteLine($"{m.Name,10} : {mota.Description}");
}
}
}
}
}
}
Data Annotation trong C#
Các Data Annotation trong C# định nghĩa trong namespace System.ComponentModel.DataAnnotations
, có các loại gồm:
- Các Attribute để kiểm tra dữ liệu (Validation Attribute)
- Các Attribute hiện thị (Display Attribute), điều khiển dữ liệu trong lớp hiện thị thế nào trong UI
- Modelling Attribute
Hãy thử xem một vài Attribute:
Required |
Dữ liệu phải được thiết lập (!=null)
[Required (ErrorMessage="{0} cần thiết lập")] |
StringLength |
Thiết lập độ dài trường dữ liệu
[StringLength (20,MinimumLength=3, ErrorMessage="Phải dài 3 đến 20 ký tự")] |
DataType |
Chỉ ra dữ liệu phải liên kết phù hợp với một kiểu nào đó
[DataType(DataType.Text)] [DataType(DataType.PhoneNumber)] [DataType(DataType.EmailAddress)] /.. Date, DateTime, Html, ImageUrl, MultilineText, Password, Time, Url |
Range |
Chỉ ra dữ liệu phải trong khoảng nào đó
[Range(18,99, ErrorMessage="Tuổi từ 18 đến 99")] [Range(typeof(DateTime), "1/2/2004", "3/4/2004", ErrorMessage = "Value for {0} must be between {1} and {2}")] |
Phone |
[Phone] dữ liệu phải là dạng số điện thoại |
EmailAddress |
[EmailAddress] dữ liệu phải là dạng email |
Thanks for watching!
Laptrinhvb via xuanthulab