[Serializable] là một Attribute để đánh dấu một đối tượng có khả năng tuần tự hóa, được sử dụng khi bạn cần chuyển dữ liệu vào một file để lưu trữ hoặc chuyển dữ liệu qua mạng...
Tùy theo từng mục đích có các loại serializable khác nhau, mình xin ví dụ về Serialization một class để lưu trữ vào trong một file, nhớ imports namespace:
Mã:
using System.Runtime.Serialization.Formatters.Binary;using System.IO;
Mã:
[Serializable] class Person { public string Name; public int Age; public Person(string name, int age) { this.Name = name; this.Age = age; } } //Trước tiên phải tạo một luồng đến file. Stream stream = new FileStream(@"C:\Test.btc", FileMode.OpenOrCreate); Person p = new Person("Thanh Chung", 20); // đổi tượng BinaryFormatter được sử dụng cho quá trình tuần tự hóa nhị phân. BinaryFormatter formatter = new BinaryFormatter(); //Phương thức Serialize để thực thi tuần tự hóa. formatter.Serialize(stream, p); Console.ReadLine();
OK, bây giờ bạn hãy F5 sau đó thì mở ổ C ra, một file có tên Test.btc đã được tạo, bây giờ ta sẽ tiến hành đọc dữ liệu từ file này, ta thực hiện quá trình ngược lại: Deserialize
Mã:
Stream stream = new FileStream(@"C:\Test.btc", FileMode.OpenOrCreate); BinaryFormatter formatter = new BinaryFormatter(); quá trình Deserialize ngược với quá trình Serialize, trả về một object, bạn nhớ ép kiểu để sử dụng. Person p = formatter.Deserialize(stream) as Person; Console.WriteLine(p.Name); Console.WriteLine(p.Age.ToString()); Console.ReadLine();
[Synchronization] là một Attribute áp dụng cho các đối tượng dẫn xuất từ System.ContextBoundObject , sau khi được áp dụng thuộc tính này, đối tượng sẽ được bảo vệ thực thi một cách đồng bộ, tránh được sự tranh chấp tài nguyên giữa các Thread, cũng giống như bạn thực hiện kĩ thuật lock vậy, khác là tất cả được thực hiện một cách tự động.
Ví dụ:
Trước tiên bạn khai báo imports namespace:
Mã:
using System.Runtime.Remoting.Contexts;using System.Threading;
Mã:
class Program { static void Main(string[] args) { new AutoLock().Test(); } } [Synchronization] public class AutoLock : ContextBoundObject { public void Demo() { Console.Write("Start..."); Thread.Sleep(1000); Console.WriteLine("end"); // lock được thực hiện tự động. } public void Test() { new Thread(Demo).Start(); new Thread(Demo).Start(); new Thread(Demo).Start(); Console.ReadLine(); } }
Đoạn code trên tương đương với (Bỏ đi thuộc tính [Synchronization])
Mã:
public void Demo() { lock (this) { Console.Write("Start..."); Thread.Sleep(1000); Console.WriteLine("end"); } }
Bạn có thể tham khảo thêm về [Synchronization]
http://www.eggheadcafe.com/software/...attribute.aspx
Mỗi liệu pháp tại Queen Spa là một hành trình chiều chuộng bản thân, giúp bạn tìm lại sức sống và năng lượng mới. Không gian của Queen Spa được thiết kế sao cho tối ưu hóa sự thoải mái và thư giãn...
Sống Đẹp và Khỏe Mạnh với Queen...