2009-03-11 19 views
9

Tôi luôn tìm cách sử dụng tất cả các công cụ tôi có thể và vươn mình ra ngoài nơi tôi đang ở. Nhưng nhiều như tôi đã đọc về đại biểu, tôi không bao giờ có thể tìm thấy một nơi để sử dụng chúng (như Giao diện, Generics, và rất nhiều thứ, nhưng tôi digress.) Tôi đã hy vọng ai đó có thể chỉ cho tôi khi nào và cách họ sử dụng một đại biểu trong web lập trình cho asp.net C# (2.0 trở lên).Khi nào tôi sẽ sử dụng một đại biểu trong asp.net?

Cảm ơn bạn và nếu điều này sai đối với Stack Overflow, vui lòng cho tôi biết.

+0

Đồng thời xem q chung: http://stackoverflow.com/questions/31497/where-do-i-use-delegates – nawfal

Trả lời

7

bdukes phù hợp với các sự kiện. Nhưng bạn không bị giới hạn chỉ sử dụng các đại biểu với các sự kiện.

Nghiên cứu Mẫu quan sát cổ điển để biết thêm ví dụ về cách sử dụng đại biểu. Một số văn bản trên mẫu hướng tới một mô hình sự kiện, nhưng từ góc độ học thô, bạn không phải sử dụng các sự kiện.

Một điều cần nhớ: Một đại biểu chỉ là một loại khác có thể được sử dụng & được truyền xung quanh tương tự như các kiểu nguyên thủy của bạn chẳng hạn như "int". Và cũng giống như "int", một đại biểu có đặc điểm riêng của nó mà bạn có thể hành động trong mã hóa của bạn khi bạn tiêu thụ loại đại biểu.

Để có được một xử lý thực sự tuyệt vời về chủ đề và trên một số khía cạnh nâng cao và chi tiết hơn, hãy tải sách của Joe Duffy, .NET Framework 2.0.

5

Vâng, bất cứ khi nào bạn xử lý một sự kiện, bạn đang sử dụng một đại biểu.

3

Để trả lời câu hỏi thứ hai của bạn trước tiên, tôi nghĩ đây là một câu hỏi tuyệt vời cho StackOverflow!

Trên trang đầu tiên, một ví dụ sẽ sắp xếp. Phương thức Sort() trong List liệt kê một delegate để thực hiện việc sắp xếp, cũng như phương thức Find(). Tôi không phải là một fan hâm mộ lớn của phân loại trong cơ sở dữ liệu, vì vậy tôi thích sử dụng Sort() trên bộ kết quả của tôi. Xét cho cùng, thứ tự của một danh sách có nhiều vấn đề về giao diện người dùng (thường) hơn là vấn đề quy tắc nghiệp vụ.

Chỉnh sửa: Tôi đã thêm lý do sắp xếp bên ngoài DB vào câu hỏi thích hợp here.

Chỉnh sửa: Hàm so sánh được sử dụng trong thường trình sắp xếp là đại biểu. Do đó, nếu bạn sắp xếp một Danh sách bằng phương thức .Sort (So sánh (T)), phương thức So sánh (T) bạn chuyển đến hàm sắp xếp là một đại biểu. Xem .Sort (So sánh (T)) documentation.

+0

Chỉ cần tò mò: Có gì sai khi sắp xếp trong cơ sở dữ liệu? –

+0

Hoàn toàn không có gì sai khi phân loại trong DB, thực tế với lượng thông tin lớn mà bạn sẽ không làm mà không làm như vậy – eglasius

+0

@Adrian: Tôi không đăng ký chế độ xem này, nhưng những người mang đến ba điểm: 1) Thông thường db mang tải nặng, trong khi khách hàng có thêm cpu. Nếu bạn có thể di chuyển sắp xếp cho khách hàng thì bạn có thể cải thiện khả năng mở rộng. [tiếp theo] –

1

Một ví dụ khác là xuất bản sự kiện cho kiểm soát của người dùng.

Ví dụ:

// In your user control 
public delegate void evtSomething(SomeData oYourData); 
public event evtSomething OnSomething; 

// In the page using your user control 
ucYourUserControl.OnSomething += ucYourUserControl_OnSomething; 

// Then implement the function 
protected void ucYourUserControl_OnSelect(SomeData oYourData) 
{ 
    ... 
} 
2

Một ví dụ khác nhanh trên đầu tôi sẽ là thử nghiệm đơn vị với tê giác Mocks. Rất nhiều điều bạn có thể làm với Rhino Mocks sử dụng các đại biểu và biểu thức lambda.

1

Gần đây tôi đã sử dụng các đại biểu cho "ủy quyền" việc kiểm tra các quyền.

Public Func CheckPermission; Bằng cách này, chức năng CheckPermission có thể được chia sẻ bởi các điều khiển khác nhau hoặc các lớp học, nói nó trong một lớp tĩnh hoặc một lớp tiện ích, và vẫn được quản lý tập trung, tránh cũng phát triển giao diện; chỉ là một ý nghĩ

1

Bạn có thể sử dụng các đại biểu bất cứ khi nào bạn biết bạn sẽ muốn thực hiện một số hành động, nhưng chi tiết của hành động đó sẽ tùy thuộc vào hoàn cảnh.

Trong số những thứ khác, chúng tôi sử dụng các đại biểu cho:

  • Sắp xếp và lọc, đặc biệt là nếu người dùng có thể lựa chọn giữa các tiêu chí phân loại/lọc khác nhau
  • Đơn giản hóa mã. Ví dụ, một quá trình lâu dài nơi bắt đầu và kết thúc luôn giống nhau, nhưng một chút giữa nhỏ thay đổi. Thay vì có một khó đọc nếu khối ở giữa, tôi có một phương pháp cho toàn bộ quá trình, và vượt qua trong một đại biểu (Hành động) cho bit giữa.
  • Tôi có một phương pháp ToString rất hữu ích trong lớp trình bày của tôi, nó chuyển đổi một bộ sưu tập bất kỳ thứ gì thành danh sách được phân cách bằng dấu phẩy. Các tham số của phương thức là một IEnumerable và một Func delegate để biến mỗi T trong bộ sưu tập thành một chuỗi. Nó hoạt động tốt như nhau để xâu chuỗi cùng nhau Người dùng bằng FirstName của họ hoặc để liệt kê các dự án theo ID của họ.
Các vấn đề liên quan