Sử dụng các đại biểu để sử dụng một mẫu gọi lại

Về cơ bản các đại biểu là các con trỏ chức năng (đó là một khái niệm được sử dụng trong các ngôn ngữ như C / C + +). Họ cũng là một lớp trong khung lập trình .net (System.Delegate). Nó là một lớp trừu tượng và nó được niêm phong; có nghĩa là bạn không thể kế thừa nó. Các đại biểu là hướng đối tượng, loại an toàn và an toàn.

Bất kỳ phương pháp nào phù hợp với chữ ký của các đại biểu, gồm có kiểu trả về và các tham số, có thể được gán cho delegate. Điều này làm cho có thể thay đổi chương trình theo cách thức các cuộc gọi, và cũng có thể cắm mã mới vào các lớp học hiện có. Miễn là bạn biết chữ ký của đại biểu, bạn có thể chỉ định phương pháp ủy nhiệm của riêng bạn.

Các mẫu không đồng bộ của việc thực hiện mã chủ yếu sử dụng mô hình gọi lại. Chức năng gọi lại sẽ thực hiện khi hoàn thành nhiệm vụ không đồng bộ. Các nhà phát triển chủ yếu sử dụng ý tưởng này để người dùng cuối có được lợi ích khi thực hiện một quy trình theo dõi (hoạt động không đồng bộ sau), nhưng nhà phát triển không cần phải biết thủ tục đó là gì và nó là gì. Tuy nhiên, nhà phát triển phải đảm bảo rằng thói quen (đó là một phương pháp) có chữ ký mà người dùng cuối chỉ định.

Lấy ví dụ của lớp FileStream trong không gian tên System.IO . Nó chủ yếu được sử dụng cho I / O. Nó có các phương pháp như BeginRead () và BeginWrite (); chúng là các phiên bản không đồng bộ của Read () và Write () tương ứng. Họ thực hiện trên một sợi khác nhau.

Nếu bạn kiểm tra các nguyên mẫu của phương pháp đầu tiên bạn sẽ tìm thấy các đối số thứ ba ( AsyncCallback userCallback ) thực sự là một đại biểu. Và, nó mong đợi một phương thức mà kiểu trả về của nó là không hợp lệ và mất một đối số kiểu IAsyncResult .

ghi đè công cộng System.IAsyncResult BeginRead ( byte [] mảng, int offset, int numBytes, System.AsyncCallback userCallback, đối tượng stateObject)

Khai báo cho AsyncCallback là:

đại biểu công khai void AsyncCallback (System.IAsyncResult ar)

Phương thức BeginRead () trả về một giá trị kiểu IAsyncResult. Nếu bạn muốn đợi một thao tác đọc không đồng bộ kết thúc, bạn phải gọi EndRead () và vượt qua giá trị IAsyncResult tương ứng.

Trên một lưu ý chung các lớp học mà làm một số hoạt động không đồng bộ có phương pháp bắt đầu và kết thúc tương ứng của họ. Hãy tiếp tục khám phá để tìm hiểu.

Happy lập trình. (và một năm mới vui vẻ năm 2009). 😉

Leave a Reply

Your email address will not be published. Required fields are marked *