Chào các bạn !
Mình mới học C# được một tháng, cũng đã học được đôi chút về C#, thấy trong CViệt các bạn viết bài về C# cũng khá nhiều, mình mới học được chút ít nhưng cũng xin đóng góp một bài.
Bài này mình viết theo ý hiểu của mình, nếu có gì sai mong các bạn góp ý nhiệt tình để mình sửa nhé [IMG]images/smilies/biggrin.png[/IMG]

Attributes in C#


- Giới thiệu:
40px
- Có 2 loại Attributes là
40px
- Bult – in Attribute
40px40px
Mã:
#define RELEASEusing 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();            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

40px

Mã:
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 thư mục của ứng dụng hiện tại hoặc hoặc trong folder SYSTEM32 của window

40px

Mã:
[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)        {            Old();  }

- Custom Attribute

40pxVD:


Mã:
  [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; }        }  }
40px
* 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:
  • + Tìm kiếm lớp thuộc tính + kiểm tra phạm vi của thuộc tính + kiểm tra constructor của thuộc tính + Tạo thể hiện của đối tượng + Kiểm tra các Named parameters + Gán giá trị của các trường hoặc thuộc tính bằng giá trị của Named parameters + Lưu lại tình trạng hiện tại của lớp thuộc tính


Bài viết của mình có tham khảo qua một số tài liệu của nước ngoài, có thể có câu mình dịch không đúng nghĩa mong các bạn góp ý thêm, rất mong được sự ủng hộ của các bạn