Thứ Hai, 20 tháng 8, 2012

Con trỏ hàm trong C#

Khái niệm con trỏ hàm mình không giải thích ở đây. Ai sử dụng delegate để viết các sự kiện cho các control thì chắc đã rành về cái này.

Đi thẳng vào ví dụ luôn:

Giả sử ta có các hàm làm phép tính như sau:
  1. public static int Cong(int n1, int n2)  
  2. {  
  3.     return n1 + n2;  
  4. }  
  5.   
  6. public static int Tru(int n1, int n2)  
  7. {  
  8.     return n1 - n2;  
  9. }  
  10.   
  11. public static int Nhan(int n1, int n2)  
  12. {  
  13.     return n1 * n2;  
  14. }  
  15.   
  16. public static int Chia(int n1, int n2)  
  17. {  
  18.     return n1 / n2;  
  19. }  
Bây giờ ta viết 1 hàm làm phép tính bất kỳ cho người dùng. Hàm này sẽ không làm gì cả mà nó sẽ ủy quyền (delegate) cho hàm tương ứng mà người dùng muốn sử dụng:
  1. public static int Tinh(int n1, Func<intintint> tenHamTinh, int n2)  
  2. {  
  3.     return tenHamTinh(n1, n2);  
  4. }  
Chú ý tham số tenHamTinh là ta truyền hàm muốn tính vào: Func<intintint> tenHamTinh. Trong <intintint> thì int cuối cùng là kiểu dữ liệu trả về của hàm, các int phía trước lần lượt là các kiểu dữ liệu của các tham số của hàm truyền vào. Khi ta truyền hàm muốn tính vào thì hàm muốn tính phải thỏa các điều kiện đó ( ở đây hàm truyền vào phải có 2 tham số  kiểu int và kết quả trả về là kiểu int).

Để sử dụng thì làm như sau:
  1. int tong = Tinh(10, Cong, 20);  
  2.   
  3. int hieu = Tinh(10, Tru, 30);  
Demo:
  1. Console.WriteLine("10 + 20 =" + Tinh(10, Cong, 20));  
  2. Console.WriteLine("10 - 20 =" + Tinh(10, Tru, 20));  

Không có nhận xét nào :

Đăng nhận xét