intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Tìm hiểu Attributes

Chia sẻ: HA KIEN | Ngày: | Loại File: PDF | Số trang:4

48
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

+ Attributes là một thành phần thêm vào được dùng để khai báo thêm thông tin về các lớp, phương thức, thuộc tính, kiểu … + Attributes có thể được áp dụng nên các phần tử khác nhau của chương trình. Các phần tử đó bao gồm:

Chủ đề:
Lưu

Nội dung Text: Tìm hiểu Attributes

  1. - Giới thiệu: + Attributes là một thành phần thêm vào được dùng để khai báo thêm thông tin về các lớp, phương thức, thuộc tính, kiểu … + Attributes có thể được áp dụng nên các phần tử khác nhau của chương trình. Các phần tử đó bao gồm: assemblies, modules, classes, stru cts, enums, constructors, methods, properties, fields, return values, và delegates + Nếu bạn đã học qua java thì Attributes cũng tương tự như Annotations trong java vậy - Có 2 loại Attributes là + Built – in attributes (attributes của hệ thống) là những attributes định nghĩa trước trong .Net Framework, một vài attributes được định nghĩa trước là STAThread, DLLImport, Conditional, Obsolete + Custom attributes (attributes do người dùng định nghĩa). Tên gọi của nó cũng cho biết attributes này do người dùng tạo ra. Khi gặp trường hợp các built – in attributes không đáp ứng đủ yêu cầu của người lập trình thì các custom attributes có thể được tạo ra để giải quyết vấn đề này + Để áp dụng một attribute cho một phần tử ta sử dụng dấu ngoặc vuông bên trong là tên a ttribute đi kèm với các tham số đi kèm nếu có, được đứng trước phần tử được áp dụng - Bult – in Attribute - Ở đây mình chỉ nói qua về 3 built – in attributes và cách sử dụng của nó như sau: + Conditional : có thể đánh dấu bất kì phương thức với attribute Conditional . sẽ ngăn ngừa trình biên dịch từ việc biên dịch phương thức đó hay bất kì câu lệnh mà tham khảo đến nó nếu tên biểu tượng không được định nghĩa. điều này có thể được dùng cho điều kiện biên dịch . Để sử dụng attribute này ta phải using namespace System.Diagnostics vào đầu chương trình #define RELEASE using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespace TutAttributes { class Program { [Conditional("RELEASE")] static void PrintDebug() { Console.WriteLine("This is TRIAL conditional"); } [Conditional("RELEASE")] static void PrintRelease() { Console.WriteLine("This is RELEASE conditional"); } static void Main(string[] args) { PrintDebug(); Biên tập: thienthanit@yahoo.com Nguồn: Internet
  2. PrintRelease(); } } } Ở ví dụ trên PrintRelease() được thực thi nếu RELEASE được định nghĩa, còn TRIAL không được định nghĩa sẽ không được thực thi + Dllimport – DLL là viết tắt của từ Dynamic Link Library. Dllimport attribute có thể được sử dụng để gọi các unmanaged code (mình dịch nó là “mã không được quản lý ”) trong một chương trình C# . Unmanaged code là code được phát triển bên ngoài .Net Framework. Để sử dụng thuộc tính Dllimport Namespace System.Runtime.InteropServices phải được import vào chương trình using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace DemoDLLImport { class Program { [DllImport("User32.dll")] public static extern int MessageBox(int hParent, string message, string caption, int type); static void Main(string[] args) { int i = MessageBox(0, "Nguyen Minh Phuong", "Title", 1); Console.WriteLine(i); } } } Phương thức MessageBox được định nghĩa trong thư viện User32.dll nên ta có thể gọi để hiện thị một hộp hội thoại của window. Tuy nhiên file.dll được chỉ ra bắt buộc phải nằm trong t hư mục của ứng dụng hiện tại hoặc hoặc trong folder SYSTEM32 của window + Obsolete - attribute này được dùng để đánh dấu 1 phương thức được xem như obsolete ( không dùng nữa) . tuỳ thuộc vào việc thiết lập trên attribute này , trình biên dịch sẽ sinh ra 1 cảnh báo hay lỗi nếu nó gặp bất kì mã nào cố gắng dùng phương thức này. [Obsolete("This is old method, you should use new method", true)] static void Old() { Console.WriteLine("I'm old method"); } static void New() { Console.WriteLine("I'm old method"); } static void Main(string[] args) { Biên tập: thienthanit@yahoo.com Nguồn: Internet
  3. Old(); } - Custom Attribute + các lớp custom Attributes phải được kế thừa trực tiếp hoặc gián tiếp từ lớp System.Attribute và được đánh dấu với thuộc tính AttributeUsage + Các lớp Attributes phải được khai báo là public vào có ít nhất 1 constructor VD: [AttributeUsage (AttributeTargets.All, AllowMultiple=false, Inherited=true)] public class CustomAttribute : System.Attribute { public string msg; private string name; private string dob; public CustomAttribute(string msg) { this.msg = msg; } public string Name { get { return name; } set { name = value; } } public string DOB { get { return dob; } set { dob = value; } } } + các attribute đều có 2 tham số là Positional parameters và Named parameters (cả hai cái này không biết dịch thế nào cho đúng nghĩa, mình để nguyên vậy) Positional parameters là tham số được chỉ ra trong constructor, trong ví dụ trên “msg” là Positional parameter Named parameters là tham số được sử dụng đi kèm với tên. Named parameters được định nghĩa bởi nonstatic field hoặc properties + Thuộc tính AttributeUsage giúp điều khiển các custom attributes. Tham số của Att ributeUsage có chưa các giá trị từ bộ liệt kê System.AttributeTargets + AttributeUsage có 3 thuộc tính có thể được dùng làm tham số là ValidOn, AllowMultiple, Inherited + Khi bạn tao 1 lớp thuộc tính với tên kết thúc là “Attribute” để phân biệt với các thành phần khác của .Net Framework bạn không cần chỉ ra “hậu tố” Attribute khi sử dụng Vd: mình có thuộc tính CustomAttribute khi mình áp dụng thuộc tính CustomAttribute cho một phần tử nào đó mình chỉ cần chỉ ra tên là Custom. Biên tập: thienthanit@yahoo.com Nguồn: Internet
  4. * Tiến trình của trình biên dịch sử lý custom attribute - Khi gặp custom attribute nào đó được áp dụng trên một phần tử của chương trình, trình biên dịch sẽ tiến hành các bước sau để ap dụng thuộc tính: 1. + Tìm kiếm lớp thuộc tính 2. + kiểm tra phạm vi của thuộc tính 3. + kiểm tra constructor của thuộc tính 4. + Tạo thể hiện của đối tượng 5. + Kiểm tra các Named parameters 6. + Gán giá trị của các trường hoặc thuộc tính bằng giá trị của Named parameters 7. + Lưu lại tình trạng hiện tại của lớp thuộc tính Biên tập: thienthanit@yahoo.com Nguồn: Internet
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2