- [DEVEXPRESS] Hướng dẫn bật tính năng Scroll Pixcel in Touch trên GridView
- [DEVEXPRESS] Hướng dẫn sử dụng TileBar viết ứng dụng duyệt hình ảnh Winform
- [DEVEXPRESS] Tô màu border TextEdit trên Winform
- [C#] Lấy dữ liệu từ Console Write hiển thị lên textbox Winform
- [C#] Hiển thị Progress bar trên Window Console
- [C#] Di chuyển control Runtime và lưu layout trên winform
- [SQLSERVER] Sử dụng hàm NULL IF
- [C#] Chia sẽ source code mã đi tuần bằng giao diện Winform
- [C#] Flash Window in Taskbar Winform
- Download và Giải nén tập tin File sử dụng Powershell
- [C#] Hướng dẫn cách lấy thông tin đăng nhập tài khoản và mật khẩu web browser trên windows
- [VB.NET] CRUD Thêm xóa sửa tìm kiếm Realtime FireBase
- [C#] Hiển thị thông báo Toast Message trong lập trình Winform
- [C#] Cấu hình định dạng ngày tháng, thời gian trên Windows cho ứng dụng Winform
- [C#] Rút gọn đường dẫn link url với TinyURL API
- [C#] Hướng dẫn cách bo tròn winform with Radius
- [C#] Chia sẽ class BackGroundOverlay Show Modal cho Winform
- [C#] Hướng dẫn Flip Image Winform
- [C#] Invoke là gì? cách sử dụng phương thức Invoke()
- [C#] Hướng dẫn chia sẽ file, folder từ ứng dụng sang Zalo Chat
[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