Các giải pháp lập trình CSharp- P73
Số trang: 10
Loại file: pdf
Dung lượng: 2.62 MB
Lượt xem: 3
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- P73: 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- P73 611 Chương 16: Các giao diện và mẫu thông dụng • Đối tượng StreamingContext cung cấp các thông tin về chủ định và đích của dữ liệu được-tuần-tự-hóa, cho phép bạn chọn tuần tự hóa dữ liệu nào. Ví dụ, bạn có thể cần tuần tự hóa dữ liệu riêng nếu nó được dành cho một miền ứng dụng khác trong cùng tiến trình, nhưng không cần nếu dữ liệu sẽ được ghi ra file.Trong quá trình giải tuần tự hóa, formatter sẽ gọi phương thức khởi dựng việc giải tuần tựhóa, lại truyền cho nó các tham chiếu SerializationInfo và StreamingContext. • Kiểu của bạn phải trích dữ liệu đã-được-tuần-tự-hóa từ đối tượng SerializationInfo bằng một trong các phương thức SerializationInfo.Get*, ví dụ: GetString, GetInt32, hay GetBoolean. • Đối tượng StreamingContext cung cấp các thông tin về nguồn gốc của dữ liệu đã-được- tuần-tự-hóa, phản ánh logic mà bạn đã hiện thực cho việc tuần tự hóa. Trong quá trình tuần tự hóa chuẩn, formatter không sử dụng khả năng của đối tượng StreamingContext để cho biết các chi tiết về nguồn gốc, đích, và chủ định của dữ liệu được-tuần-tự-hóa. Tuy nhiên, nếu muốn thực hiện quá trình tuần tự hóa tùy biến, bạn có thể cấu hình đối tượng StreamingContext của formatter trước khi bắt đầu quá trình tuần tự hóa và giải tuần tự hóa. Tham khảo tài liệu .NET Framework SDK để có thêm thông tin về lớp StreamingContext.Ví dụ dưới đây trình bày phiên bản đã được chỉnh sửa của lớp Employee, có hiện thực giaodiện ISerializable. Trong phiên bản này, lớp Employee không tuần tự hóa trường addressnếu đối tượng StreamingContext chỉ định rằng đích của dữ liệu được-tuần-tự-hóa là file.Phương thức Main sẽ giải thích việc tuần tự hóa và giải tuần tự hóa của một đối tượngEmployee.using System;using System.Runtime.Serialization;[Serializable]public class Employee : ISerializable { private string name; private int age; private string address; // Phương thức khởi dựng đơn giản. public Employee(string name, int age, string address) { this.name = name; this.age = age; this.address = address; }612Chương 16: Các giao diện và mẫu thông dụng // Phương thức khởi dựng dùng để kích hoạt formatter thực hiện việc // giải tuần tự hóa một đối tượng Employee. Bạn nên khai báo // phương thức khởi dựng này là private, hay ít nhất cũng là // protected để bảo đảm nó không bị gọi quá mức cần thiết. private Employee(SerializationInfo info, StreamingContext context) { // Trích xuất tên và tuổi của Employee (sẽ luôn hiện diện // trong dữ liệu đã-được-tuần-tự-hóa bất chấp giá trị // của StreamingContext). name = info.GetString(Name); age = info.GetInt32(Age); // Thực hiện trích xuất địa chỉ của Employee // (thất bại nếu không có). try { address = info.GetString(Address); } catch (SerializationException) { address = null; } } // Các thuộc tính Name, Age, và Address (đã trình bày ở trên). § // Được khai báo bởi giao diện ISerializable, phương thức // GetObjectData cung cấp cơ chế để formatter thu lấy // dữ liệu sẽ-được-tuần-tự-hóa. public void GetObjectData(SerializationInfo inf, StreamingContext con){ // Luôn tuần tự hóa tên và tuổi của Employee. inf.AddValue(Name, name); inf.AddValue(Age, age); // Không tuần tự hóa địa chỉ của Employee nếu StreamingContext // cho biết rằng dữ liệu được-tuần-tự-hóa sẽ được ghi ra file. 613 Chương 16: Các giao diện và mẫu thông dụng if ((con.State & StreamingContextStates.File) == 0) { inf.AddValue(Address, address); }}// Chép đè Object.ToString để trả về chuỗi mô tả Employee.public override string ToString() { StringBuilder str = new StringBuilder(); str.AppendFormat(Name: {0}\n\r, Name); str.AppendFormat(Age: {0}\n\r, Age); str.AppendFormat(Address: {0}\n\r, Address); return str.ToString();}public static void Main(string[] args) { // Tạo một đối tượng Employee mô tả Phuong. Employee phuong = new Employee(Phuong, 23, HCM); // Hiển thị Phuong. Console.WriteLine(phuong); // Tuần tự hóa Phuong với đích là một miền ứng dụng khác. // Địa chỉ của Phuong sẽ được tuần tự hóa. Stream str = File.Create(phuong.bin); BinaryFormatter bf = new BinaryFormatter(); bf.Context = new StreamingContext(StreamingContextStates.CrossAppDomain); bf.Serialize(str, phuong); str.Close(); // Giải tuần tự hóa và hiển thị Phuong. str = File.OpenRead(phuong.bin); 614 Chương 16: Các giao diện và mẫu thông dụng bf = new BinaryFormatter(); phuong = (Employee)bf.Deserialize(str); str.Close(); Console.WriteLine(phuong); // Tuần tự hóa Phuong với đích là file. Trong trường hợp này, // địa chỉ của Phuong sẽ không được tuần tự hóa. str = File.Create(phuong.bin); bf = new BinaryFormatter(); bf.Context = new StreamingContext(StreamingContextStates.File); bf.Serialize(str, phuong); str.Close(); // Giải tuần tự hóa và hiển thị Phuong. str = File.OpenRead(phuong.bin); bf = new BinaryFormatter(); phuong = (Employee)bf.Deserialize(str); str.Close(); Console.WriteLine(phuong); Console.ReadLine(); }}2. Hiện thực kiểu khả-sao-chép (cloneable type) Bạn cần tạ ...
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P73 611 Chương 16: Các giao diện và mẫu thông dụng • Đối tượng StreamingContext cung cấp các thông tin về chủ định và đích của dữ liệu được-tuần-tự-hóa, cho phép bạn chọn tuần tự hóa dữ liệu nào. Ví dụ, bạn có thể cần tuần tự hóa dữ liệu riêng nếu nó được dành cho một miền ứng dụng khác trong cùng tiến trình, nhưng không cần nếu dữ liệu sẽ được ghi ra file.Trong quá trình giải tuần tự hóa, formatter sẽ gọi phương thức khởi dựng việc giải tuần tựhóa, lại truyền cho nó các tham chiếu SerializationInfo và StreamingContext. • Kiểu của bạn phải trích dữ liệu đã-được-tuần-tự-hóa từ đối tượng SerializationInfo bằng một trong các phương thức SerializationInfo.Get*, ví dụ: GetString, GetInt32, hay GetBoolean. • Đối tượng StreamingContext cung cấp các thông tin về nguồn gốc của dữ liệu đã-được- tuần-tự-hóa, phản ánh logic mà bạn đã hiện thực cho việc tuần tự hóa. Trong quá trình tuần tự hóa chuẩn, formatter không sử dụng khả năng của đối tượng StreamingContext để cho biết các chi tiết về nguồn gốc, đích, và chủ định của dữ liệu được-tuần-tự-hóa. Tuy nhiên, nếu muốn thực hiện quá trình tuần tự hóa tùy biến, bạn có thể cấu hình đối tượng StreamingContext của formatter trước khi bắt đầu quá trình tuần tự hóa và giải tuần tự hóa. Tham khảo tài liệu .NET Framework SDK để có thêm thông tin về lớp StreamingContext.Ví dụ dưới đây trình bày phiên bản đã được chỉnh sửa của lớp Employee, có hiện thực giaodiện ISerializable. Trong phiên bản này, lớp Employee không tuần tự hóa trường addressnếu đối tượng StreamingContext chỉ định rằng đích của dữ liệu được-tuần-tự-hóa là file.Phương thức Main sẽ giải thích việc tuần tự hóa và giải tuần tự hóa của một đối tượngEmployee.using System;using System.Runtime.Serialization;[Serializable]public class Employee : ISerializable { private string name; private int age; private string address; // Phương thức khởi dựng đơn giản. public Employee(string name, int age, string address) { this.name = name; this.age = age; this.address = address; }612Chương 16: Các giao diện và mẫu thông dụng // Phương thức khởi dựng dùng để kích hoạt formatter thực hiện việc // giải tuần tự hóa một đối tượng Employee. Bạn nên khai báo // phương thức khởi dựng này là private, hay ít nhất cũng là // protected để bảo đảm nó không bị gọi quá mức cần thiết. private Employee(SerializationInfo info, StreamingContext context) { // Trích xuất tên và tuổi của Employee (sẽ luôn hiện diện // trong dữ liệu đã-được-tuần-tự-hóa bất chấp giá trị // của StreamingContext). name = info.GetString(Name); age = info.GetInt32(Age); // Thực hiện trích xuất địa chỉ của Employee // (thất bại nếu không có). try { address = info.GetString(Address); } catch (SerializationException) { address = null; } } // Các thuộc tính Name, Age, và Address (đã trình bày ở trên). § // Được khai báo bởi giao diện ISerializable, phương thức // GetObjectData cung cấp cơ chế để formatter thu lấy // dữ liệu sẽ-được-tuần-tự-hóa. public void GetObjectData(SerializationInfo inf, StreamingContext con){ // Luôn tuần tự hóa tên và tuổi của Employee. inf.AddValue(Name, name); inf.AddValue(Age, age); // Không tuần tự hóa địa chỉ của Employee nếu StreamingContext // cho biết rằng dữ liệu được-tuần-tự-hóa sẽ được ghi ra file. 613 Chương 16: Các giao diện và mẫu thông dụng if ((con.State & StreamingContextStates.File) == 0) { inf.AddValue(Address, address); }}// Chép đè Object.ToString để trả về chuỗi mô tả Employee.public override string ToString() { StringBuilder str = new StringBuilder(); str.AppendFormat(Name: {0}\n\r, Name); str.AppendFormat(Age: {0}\n\r, Age); str.AppendFormat(Address: {0}\n\r, Address); return str.ToString();}public static void Main(string[] args) { // Tạo một đối tượng Employee mô tả Phuong. Employee phuong = new Employee(Phuong, 23, HCM); // Hiển thị Phuong. Console.WriteLine(phuong); // Tuần tự hóa Phuong với đích là một miền ứng dụng khác. // Địa chỉ của Phuong sẽ được tuần tự hóa. Stream str = File.Create(phuong.bin); BinaryFormatter bf = new BinaryFormatter(); bf.Context = new StreamingContext(StreamingContextStates.CrossAppDomain); bf.Serialize(str, phuong); str.Close(); // Giải tuần tự hóa và hiển thị Phuong. str = File.OpenRead(phuong.bin); 614 Chương 16: Các giao diện và mẫu thông dụng bf = new BinaryFormatter(); phuong = (Employee)bf.Deserialize(str); str.Close(); Console.WriteLine(phuong); // Tuần tự hóa Phuong với đích là file. Trong trường hợp này, // địa chỉ của Phuong sẽ không được tuần tự hóa. str = File.Create(phuong.bin); bf = new BinaryFormatter(); bf.Context = new StreamingContext(StreamingContextStates.File); bf.Serialize(str, phuong); str.Close(); // Giải tuần tự hóa và hiển thị Phuong. str = File.OpenRead(phuong.bin); bf = new BinaryFormatter(); phuong = (Employee)bf.Deserialize(str); str.Close(); Console.WriteLine(phuong); Console.ReadLine(); }}2. Hiện thực kiểu khả-sao-chép (cloneable type) Bạn cần tạ ...
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 210 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 202 0 0 -
101 trang 199 1 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 149 0 0 -
142 trang 129 0 0
-
161 trang 129 1 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 107 0 0 -
78 trang 101 0 0