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:
- public static int Cong(int n1, int n2)
- {
- return n1 + n2;
- }
-
- public static int Tru(int n1, int n2)
- {
- return n1 - n2;
- }
-
- public static int Nhan(int n1, int n2)
- {
- return n1 * n2;
- }
-
- public static int Chia(int n1, int n2)
- {
- return n1 / n2;
- }
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:
- public static int Tinh(int n1, Func<int, int, int> tenHamTinh, int n2)
- {
- return tenHamTinh(n1, n2);
- }
Chú ý tham số
tenHamTinh là ta truyền hàm muốn tính vào:
Func<int, int, int> tenHamTinh. Trong
<int, int, int> 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:
- int tong = Tinh(10, Cong, 20);
-
- int hieu = Tinh(10, Tru, 30);
Demo:
- Console.WriteLine("10 + 20 =" + Tinh(10, Cong, 20));
- Console.WriteLine("10 - 20 =" + Tinh(10, Tru, 20));
Không có nhận xét nào :
Đăng nhận xét