Các giải pháp lập trình CSharp- P10
Số trang: 10
Loại file: pdf
Dung lượng: 2.63 MB
Lượt xem: 16
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Các giải pháp lập trình CSharp- P10: Các giải pháp lập trình C# khảo sát chiều rộng của thư viện lớp .NET Framework và cung cấp giải pháp cụ thể cho các vấn đềthường gặp. Mỗi giải pháp được trình bày theo dạng “vấn đề/giải pháp” một cách ngắn gọn và kèm theo là các ví dụ mẫu.
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P10 91 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu // Hiện thực các thành viên ở đây. §}3. Tránh nạp các assembly không cần thiết vào miền ứng dụng Bạn cần chuyển một tham chiếu đối tượng qua lại giữa các miền ứng dụng khác nhau; tuy nhiên, bạn không muốn CLR nạp siêu dữ liệu mô tả kiểu của đối tượng vào các miền ứng dụng trung gian. Đóng gói tham chiếu đối tượng trong một System.Runtime.Remoting.ObjectHandle và khi cần truy xuất đối tượng thì khôi phục lại.Khi bạn truyền một đối tượng marshal-by-value (MBV) qua các miền ứng dụng, bộ thực thi sẽtạo một thể hiện mới của đối tượng này trong miền ứng dụng đích. Điều này có nghĩa là bộthực thi phải nạp assembly chứa siêu dữ liệu mô tả kiểu của đối tượng vào các miền ứng dụng.Do đó, việc truyền các tham chiếu MBV qua các miền ứng dụng trung gian sẽ dẫn đến việc bộthực thi nạp các assembly không cần thiết vào các miền ứng dụng này. Một khi đã được nạpthì các assembly thừa này sẽ không được giải phóng khỏi miền ứng dụng nếu không giảiphóng cả miền ứng dụng chứa chúng (xem mục 3.9).Lớp ObjectHandle cho phép bạn đóng gói tham chiếu đối tượng để truyền qua các miền ứngdụng mà bộ thực thi không phải nạp thêm assembly. Khi đối tượng này đến miền ứng dụngđích, bạn có thể khôi phục tham chiếu đối tượng, bộ thực thi sẽ nạp các assembly cần thiết vàcho phép bạn truy xuất đến đối tượng như bình thường. Để đóng gói một đối tượng (ví dụSystem.Data.DataSet), bạn có thể thực hiện như sau:// Tạo một DataSet mới.System.Data.DataSet data1 = new System.Data.DataSet();// Cấu hình/thêm dữ liệu cho DataSet.§// Đóng gói DataSet.System.Runtime.Remoting.ObjectHandle objHandle = new System.Runtime.Remoting.ObjectHandle(data1);Để khôi phục một đối tượng, sử dụng phương thức ObjectHandle.Unwrap và ép kiểu trả về chophù hợp, ví dụ:// Khôi phục DataSet từ ObjectHandle.System.Data.DataSet data2 = (System.Data.DataSet)objHandle.Unwrap(); 92 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu4. Tạo kiểu không thể vượt qua biên miền ứng dụng Bạn cần tạo một kiểu dữ liệu sao cho các thể hiện của kiểu này không thể được truy xuất từ mã lệnh ở các miền ứng dụng khác. Phải chắc chắn kiểu dữ liệu thuộc dạng nonremotable, tức là không thể tuần tự hóa cũng như không dẫn xuất từ lớp MarshalByRefObject.Đôi khi bạn muốn kiểu dữ liệu nào đó chỉ được giới hạn truy xuất trong phạm vi của miền ứngdụng. Để tạo kiểu dữ liệu dạng nonremotable, phải chắc rằng kiểu này không phải là khả-tuần-tự-hóa và cũng không dẫn xuất (trực tiếp hay gián tiếp) từ lớp MarshalByRefObject.Những điều kiện này sẽ đảm bảo rằng trạng thái của đối tượng không thể được truy xuất từcác miền ứng dụng khác (các đối tượng này không thể được sử dụng làm đối số hay giá trị trảvề trong các lời gọi phương thức liên miền ứng dụng).Điều kiện kiểu dữ liệu không phải là khả-tuần-tự-hóa được thực hiện dễ dàng do một lớpkhông thừa kế khả năng tuần tự hóa từ lớp cha của nó. Để bảo đảm một kiểu không phải làkhả-tuần-tự-hóa, bạn phải chắc chắn rằng đặc tính System.SerializableAttribute khôngđược áp dụng khi khai báo kiểu.Bạn cần lưu ý khi đảm bảo một lớp không được truyền bằng tham chiếu. Nhiều lớp trong thưviện lớp .NET dẫn xuất trực tiếp hay gián tiếp từ MarshalByRefObject; bạn phải cẩn thậnkhông dẫn xuất lớp của bạn từ các lớp này. Những lớp cơ sở thông dụng dẫn xuất từMarshalByRefObject bao gồm: System.ComponentModel.Component, System.IO.Stream,System.IO.TextReader, System.IO.TextWriter, System.NET.WebRequest, và System.Net.WebResponse (xem tài liệu .NET Framework SDK để có danh sách đây đu các lớp dẫn xuất từMarshalByRefObject).5. Nạp assembly vào miền ứng dụng hiện hành Bạn cần nạp một assembly vào miền ứng dụng lúc thực thi. Sử dụng phương thức tĩnh Load hay LoadFrom của lớp System.Reflection.Assembly.Bộ thực thi tự động nạp các assembly mà assembly của bạn tham chiếu đến lúc biên dịch. Tuynhiên, bạn cũng có thể chỉ thị cho bộ thực thi nạp assembly. Các phương thức Load vàLoadFrom đều thực hiện một công việc là nạp một assembly vào miền ứng dụng hiện hành, vàcả hai đều trả về một đối tượng Assembly mô tả assembly vừa được nạp. Sự khác biệt giữa haiphương thức là danh sách các đối số được cung cấp để nhận dạng assembly cần nạp, và cáchthức bộ thực thi định vị assembly này.Phương thức Load cung cấp nhiều dạng thức cho phép chỉ định assembly cần nạp, bạn có thểsử dụng một trong những dạng sau: • Một string chứa tên đầy đủ hay tên riêng phân đê nhận dạng assembly. ...
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P10 91 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu // Hiện thực các thành viên ở đây. §}3. Tránh nạp các assembly không cần thiết vào miền ứng dụng Bạn cần chuyển một tham chiếu đối tượng qua lại giữa các miền ứng dụng khác nhau; tuy nhiên, bạn không muốn CLR nạp siêu dữ liệu mô tả kiểu của đối tượng vào các miền ứng dụng trung gian. Đóng gói tham chiếu đối tượng trong một System.Runtime.Remoting.ObjectHandle và khi cần truy xuất đối tượng thì khôi phục lại.Khi bạn truyền một đối tượng marshal-by-value (MBV) qua các miền ứng dụng, bộ thực thi sẽtạo một thể hiện mới của đối tượng này trong miền ứng dụng đích. Điều này có nghĩa là bộthực thi phải nạp assembly chứa siêu dữ liệu mô tả kiểu của đối tượng vào các miền ứng dụng.Do đó, việc truyền các tham chiếu MBV qua các miền ứng dụng trung gian sẽ dẫn đến việc bộthực thi nạp các assembly không cần thiết vào các miền ứng dụng này. Một khi đã được nạpthì các assembly thừa này sẽ không được giải phóng khỏi miền ứng dụng nếu không giảiphóng cả miền ứng dụng chứa chúng (xem mục 3.9).Lớp ObjectHandle cho phép bạn đóng gói tham chiếu đối tượng để truyền qua các miền ứngdụng mà bộ thực thi không phải nạp thêm assembly. Khi đối tượng này đến miền ứng dụngđích, bạn có thể khôi phục tham chiếu đối tượng, bộ thực thi sẽ nạp các assembly cần thiết vàcho phép bạn truy xuất đến đối tượng như bình thường. Để đóng gói một đối tượng (ví dụSystem.Data.DataSet), bạn có thể thực hiện như sau:// Tạo một DataSet mới.System.Data.DataSet data1 = new System.Data.DataSet();// Cấu hình/thêm dữ liệu cho DataSet.§// Đóng gói DataSet.System.Runtime.Remoting.ObjectHandle objHandle = new System.Runtime.Remoting.ObjectHandle(data1);Để khôi phục một đối tượng, sử dụng phương thức ObjectHandle.Unwrap và ép kiểu trả về chophù hợp, ví dụ:// Khôi phục DataSet từ ObjectHandle.System.Data.DataSet data2 = (System.Data.DataSet)objHandle.Unwrap(); 92 Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu4. Tạo kiểu không thể vượt qua biên miền ứng dụng Bạn cần tạo một kiểu dữ liệu sao cho các thể hiện của kiểu này không thể được truy xuất từ mã lệnh ở các miền ứng dụng khác. Phải chắc chắn kiểu dữ liệu thuộc dạng nonremotable, tức là không thể tuần tự hóa cũng như không dẫn xuất từ lớp MarshalByRefObject.Đôi khi bạn muốn kiểu dữ liệu nào đó chỉ được giới hạn truy xuất trong phạm vi của miền ứngdụng. Để tạo kiểu dữ liệu dạng nonremotable, phải chắc rằng kiểu này không phải là khả-tuần-tự-hóa và cũng không dẫn xuất (trực tiếp hay gián tiếp) từ lớp MarshalByRefObject.Những điều kiện này sẽ đảm bảo rằng trạng thái của đối tượng không thể được truy xuất từcác miền ứng dụng khác (các đối tượng này không thể được sử dụng làm đối số hay giá trị trảvề trong các lời gọi phương thức liên miền ứng dụng).Điều kiện kiểu dữ liệu không phải là khả-tuần-tự-hóa được thực hiện dễ dàng do một lớpkhông thừa kế khả năng tuần tự hóa từ lớp cha của nó. Để bảo đảm một kiểu không phải làkhả-tuần-tự-hóa, bạn phải chắc chắn rằng đặc tính System.SerializableAttribute khôngđược áp dụng khi khai báo kiểu.Bạn cần lưu ý khi đảm bảo một lớp không được truyền bằng tham chiếu. Nhiều lớp trong thưviện lớp .NET dẫn xuất trực tiếp hay gián tiếp từ MarshalByRefObject; bạn phải cẩn thậnkhông dẫn xuất lớp của bạn từ các lớp này. Những lớp cơ sở thông dụng dẫn xuất từMarshalByRefObject bao gồm: System.ComponentModel.Component, System.IO.Stream,System.IO.TextReader, System.IO.TextWriter, System.NET.WebRequest, và System.Net.WebResponse (xem tài liệu .NET Framework SDK để có danh sách đây đu các lớp dẫn xuất từMarshalByRefObject).5. Nạp assembly vào miền ứng dụng hiện hành Bạn cần nạp một assembly vào miền ứng dụng lúc thực thi. Sử dụng phương thức tĩnh Load hay LoadFrom của lớp System.Reflection.Assembly.Bộ thực thi tự động nạp các assembly mà assembly của bạn tham chiếu đến lúc biên dịch. Tuynhiên, bạn cũng có thể chỉ thị cho bộ thực thi nạp assembly. Các phương thức Load vàLoadFrom đều thực hiện một công việc là nạp một assembly vào miền ứng dụng hiện hành, vàcả hai đều trả về một đối tượng Assembly mô tả assembly vừa được nạp. Sự khác biệt giữa haiphương thức là danh sách các đối số được cung cấp để nhận dạng assembly cần nạp, và cáchthức bộ thực thi định vị assembly này.Phương thức Load cung cấp nhiều dạng thức cho phép chỉ định assembly cần nạp, bạn có thểsử dụng một trong những dạng sau: • Một string chứa tên đầy đủ hay tên riêng phân đê nhận dạng assembly. ...
Tìm kiếm theo từ khóa liên quan:
kinh nghiệm lập trình CSharp mẹo lập trình ngôn ngữ lập trình C giáo trình lập trình CSharp lập trình java lập trình căn bản CSharpGợi ý tài liệu liên quan:
-
Thủ thuật giúp giải phóng dung lượng ổ cứng
4 trang 208 0 0 -
101 trang 198 1 0
-
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 194 0 0 -
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 148 0 0 -
161 trang 129 1 0
-
142 trang 128 0 0
-
Giáo trình Vi điều khiển PIC: Phần 1
119 trang 116 0 0 -
Bài giảng Phương pháp lập trình: Chương 9 - GV. Từ Thị Xuân Hiền
36 trang 109 0 0 -
Excel add in development in c and c phần 9
0 trang 104 0 0 -
78 trang 99 0 0