Danh mục

Attributes và ReflectionGvhd: Nguyễn Tấn Trần Minh Khang

Số trang: 26      Loại file: pdf      Dung lượng: 410.79 KB      Lượt xem: 7      Lượt tải: 0    
tailieu_vip

Hỗ trợ phí lưu trữ khi tải xuống: 11,000 VND Tải xuống file đầy đủ (26 trang) 0

Báo xấu

Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Constructor Delegate Enum Event Field Interface Method Module Parameter Property ReturnValue StructÁp dụng với hàm dựng Áp dụng cho delegate Áp dụng cho kiểu liệt kê Áp dụng cho sự kiện Áp dụng cho biến thành viên (tĩnh lẫn không tĩnh) Áp dụng cho giao diện Áp dụng cho phương thức Áp dụng cho module Áp dụng cho tham số Áp dụng cho property Áp dụng cho trị trả về Áp dụng cho cấu trúc
Nội dung trích xuất từ tài liệu:
Attributes và ReflectionGvhd: Nguyễn Tấn Trần Minh KhangAttributes và Reflection Gvhd: Nguyễn Tấn Trần Minh Khang Constructor Áp dụng với hàm dựng Delegate Áp dụng cho delegate Enum Áp dụng cho kiểu liệt kê Event Áp dụng cho sự kiện Field Áp dụng cho biến thành viên (tĩnh lẫn không tĩnh) Interface Áp dụng cho giao diện Method Áp dụng cho phương thức Module Áp dụng cho module Parameter Áp dụng cho tham số Property Áp dụng cho property ReturnValue Áp dụng cho trị trả về Struct Áp dụng cho cấu trúc18.2.2 Áp dụng AttributeLập trình viên áp dụng attribute lên mục tiêu bằng cách đặt attribute trong ngoặcvuông [] liền trước mục tiêu. Ví dụ attribute “Assembly” được áp dụng: [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile(“keyfile.snk”)]Cách sau cũng tương đương với cách trên: [assembly: AssemblyDelaySign(false), assembly: AssemblyKeyFile(“keyfile.snk”)]Attribute thường dùng trong lập trình C# là “Serializable” [serializable] class MySerClassAttribute trên báo cho compiler biết rằng lớp MySerClass cần được bảo đảm trongviệc ghi nội dung, trạng thát xuống dĩa từ hay truyền qua mạng.18.3 Attribute do lập trình viên tạo raLập trình viên hoàn toàn tự do trong việc tạo ra các attribute riêng và đem sử dụngchúng vào nơi nào cảm thấy thích hợp.18.3.1 Khai báo Attribute tự tạoĐầu tiên là thừa kế một lớp từ lớp System.Attribute: Public class XYZ : System.AttributeSau đó là báo cho compiler biết attribute này có thể đem áp dụng lên mục tiêu nào. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] 201Attributes và Reflection Gvhd: Nguyễn Tấn Trần Minh KhangAttribute “AttributeUsage” trên có mục tiêu áp dụng là Attribute khác: gọi làmeta-attribute.18.3.2 Đặt tên một attributeLập trình viên hoàn toàn tự do trong việc đặt tên cho attribute. Tuy nhiên, compilercủa .NET còn có thêm khả năng tự nối thêm chuỗi “Attribute” vào tên. Điều đó cónghĩa là nếu lập trình viên định nghĩa một attribute có tên là “MyBugFix” thì khitìm kiếm hoặc truy xuất attribute trên, lập trình viên có thể viết tên attribute:“MyBugFix” hoặc “MyBugFixAttribute”. Nếu một attribute có tên là“MyBugFixAttribute” thì lập trình viên cũng có thể ghi tên attribute là“MyBugFix” hoặc “MyBugFixAttribute”.Ví dụ: [MyBugFix(123, Jesse Liberty, 01/01/05, Comment=Off by one)]18.3.3 Khởi tạo AttributeMỗi attribute phải có ít nhất một contructor. Attribute nhận 2 kiểu đối số: kiểu vị trí(positional) và kiểu tên (named).Trong ví dụ MyBugFix ở phần trước, phần tên và ngày tháng là kiểu vị trí, phần ghichú (comment) là kiểu tên.Các đối số kiểu vị trí phải được truyền vào contructor đúng theo thứ tự khai báo. Vídụ: public BugFixAttribute(int bugID, string programmer, string date) { this.bugID = bugID; this.programmer = programmer; this.date = date; }Đối số kiểu tên thì được cài đặt như là properties: public string Comment { get { return comment; } set { comment = value; } }18.3.4 Sử dụng AttributeMột khi đã định nghĩa attribute, lập trình viên sử dụng nó bằng cách đặt nó ngaytrước mục tiêu (target) của nó. Ví dụ: [BugFixAttribute(121,Jesse Liberty,01/03/05)] BugFixAttribute(107,Jesse Liberty,01/04/05, Comment=Fixed off by one errors)] public class MyMathVí dụ trên áp dụng attribute MyBugFix vào lớp MyMath. 202Attributes và Reflection Gvhd: Nguyễn Tấn Trần Minh Khang18.4 ReflectionĐể cho việc lưu attribute trong metadata có ích, cần phải có cơ chế truy xuất chúngvào lúc chạy. Các lớp trong vùng tên (namespace) Reflection, cùng với các lớptrong System.Type và System.TypeReference, cung cấp sự hỗ trợ truy xuấtmetadata.Reflection là một khái niệm chung cho bất kỳ thao tác nào trong các thao tác sauđây: • Xem xét metadata • Tìm hiểu kiểu dữ liệu (type discovery): lớp, interface, phương thức, đối số của phương thức, properties, event, field, … • Nối kết trễ các phương thức và properties (late binding to methods and properties) • Tạo ra một kiểu dữ liệu mới ngay trong lúc thực thi. Lập trình viên có thể định nghĩa một assembly mới ngay lúc chạy, có thể lưu xuống dĩa từ để dùng lại. 203Marshaling và Remoting Gvhd: Nguyễn Tấn Trần Minh KhangChương 19 Marshaling và RemotingNgày nay, các ứng dụng không còn đơn thuần chỉ gồm một module, khi thực thi thìchỉ cần chạy trong một process mà là một tập hợp nhiều thành phần (component)phức tạp. Các thành phần đó không chỉ phân cách với nhau bằng ranh giới giữa cácprocess mà còn có thể phân cách với nhau qua ranh giới máy - mạng - máy.Tiến trình di chuyển một đối tượng vượt qua một ranh giới (process, máy, …) đượcgọi là Remoting.Tiến trình chuẩn bị để một đối tượng thực hiện remoting được gọi là Marshaling.Giả sử đối tượng A nằm trên máy X muốn sử dụng dịch vụ của đối tượng B nằmtrên máy Y. Để phục vụ đối tượng A, đối tượng B chuyển cho A một đối tượngproxy. Những yêu cầu từ đối tượng A sẽ được proxy chuyển về cho B, những kếtquả trả lời của B được gởi đến proxy, proxy sẽ gởi lại cho đối tượng A. Giữa đốitượng A và đối tượng B có nhiều đối tượng sink, công việc của các đối tượng sinklà áp đặt an ninh lên kênh liên lạc giữa 2 đối tượng. Các thông điệp được chuyển tảigiữa A và B trên một đối tượng channel. Đối tượng channel lại yêu cầu sự giúp đỡcủa đối tượng formatter. Công v ...

Tài liệu được xem nhiều: