Danh mục

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    
Hoai.2512

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ạ ...

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