C # đại biểu hướng dẫn và ví dụ
C # đại biểu cho phép sử dụng một phương pháp như một đối tượng. Điều này có nghĩa rằng bạn có thể vượt qua phương pháp này như một cuộc tranh cãi với một số phương pháp khác. Này được thực hiện bằng cách chỉ một đại biểu cho một phương pháp và thông qua các đại biểu như một cuộc tranh cãi. Sau đó sử dụng các đại biểu bạn có thể gọi phương thức mà các đại biểu được trỏ đến.
Phần sử dụng của các đại biểu là do đó, một phương pháp có thể được truyền từ một đối tượng khác.
Như chúng ta đã biết một phương pháp đại diện cho một số loại hành động mà một đối tượng có thể làm. Hành động đó được thực hiện trong định nghĩa phương pháp riêng của mình trong lớp học phương pháp này được khai báo. Với đại biểu thực hiện các phương pháp hoặc một phần của phương pháp này chứa đựng trong lớp, có thể được giao cho lớp khác.
Đây, chúng ta có một ví dụ đơn giản để hiểu đại biểu. Chúng tôi có một lớp Danh sách phát cho phép để thêm bài hát vào danh sách phát. Lớp Danh sách phát cung cấp một phương pháp gọi là ShowPlaylist mà in ra tất cả các bài hát trong playlist.
lớp Danh sách phát
{
// code eliminated for brevity
public void ShowPlaylist()
{
cho mỗi (song song trong this.list)
{
Console.WriteLine("Tên bài hát: {0}". tên bài hát);
}
}
}
Sử dụng phương pháp danh sách nhạc lớp ShowPlaylist sẽ nhận được đầy đủ danh sách in.
Hãy giới thiệu đại biểu đến lớp Danh sách phát. Sử dụng một đại biểu sẽ cho phép người tiêu dùng của lớp Playlist để thực hiện logic cho hiển thị các danh sách nhạc.
Ở đây chúng ta khai báo một delegate trong lớp Danh sách phát trong đó có một tham số hát kiểu Sông
lớp Danh sách phát
{
// đang loại bỏ cho ngắn gọn
// delegate for showing song
public delegate bool ProcessPlaylistDelegate(song song);
...
Chúng tôi cần phải điều chỉnh ShowPlayList() Phương pháp sử dụng ProcessPlaylistDelegate. Phương pháp ShowPlayList lấy ProcessPlaylistDelegate như một tham số. Bây giờ chúng ta có thể xử lý các danh sách nhạc trước khi in nó.
//show the playlist using another function attached to ProcessPlaylistDelegate
public void ShowPlaylist(ProcessPlaylistDelegate processPlaylist)
{
cho mỗi (song song trong this.list)
{
nếu (processPlaylist(bài hát))
{
Console.WriteLine("Tên bài hát: {0}", tên bài hát);
}
}
}
Bây giờ lớp này có thể ủy thác bất kỳ chế biến để phương pháp khác miễn là kiểu trả về và kiểu tham số phù hợp với các đại biểu. Dưới đây Chương trình lớp được sử dụng lớp Danh sách phát. Chúng tôi tuyên bố một Playlist.ProcessPlaylistDelegate mới và sau đó chúng ta đang gắn getMp3Songs để các đại biểu.
Chương trình lớp
{
static void Main(chuỗi[] args)
{
Danh sách phát playlist1 = playlist mới();
//add some songs to the playlist
//use the delegate to process the list before it is printed on the screen
playlist1.ShowPlaylist(Playlist.ProcessPlaylistDelegate mới(GetMp3Songs));
}
}
Dưới đây là định nghĩa phương pháp getMp3Songs. Phương pháp này chỉ trả về các bài hát mp3. Do đó ShowPlaylist ony sẽ in những bài hát mp3.
công GetMp3Songs bool tĩnh(song song)
{
//more logic goes here
return (song.Format == "mp3");
}
Sức mạnh của các đại biểu sẽ xảy ra khi chúng ta có thể xử lý các playlist khác nhau mà không cần phải chạm vào lớp Danh sách phát. Dưới đây chúng tôi tuyên bố 2 các phương pháp khác trong lớp Chương trình.
công GetCdSongs bool tĩnh(song song)
{
//more logic goes here
return (song.Format == "CD");
}
công GetAllSongs bool tĩnh(song song)
{
//more logic goes here
return true;
}
Bây giờ chúng ta chỉ cần đính kèm này để các đại biểu trong phương thức Main. Những phương pháp này sẽ xử lý danh sách nhạc khác nhau. Phương pháp đầu tiên sẽ chỉ bao gồm những bài hát cd và phương pháp thứ hai sẽ bao gồm tất cả các bài hát. Đây chỉ là một ví dụ đơn giản nhưng chúng ta có thể thêm càng nhiều xử lý như chúng tôi yêu cầu mà không cần phải chạm vào Playlist lớp.
playlist1.ShowPlaylist(Playlist.ProcessPlaylistDelegate mới(GetCdSongs));
playlist1.ShowPlaylist(Playlist.ProcessPlaylistDelegate mới(GetAllSongs));
