Chào các bạn, mình mới học lập trình C#, đọc đến chỗ delegate thì chẳng hiểu gì cả. Mong các bạn giải thích rõ cho mình. mình xin cảm ơn.
Cần giải thích về delegate trong c#
Delegate : cơ chế ủy quyền tương tự con trỏ hàm của C++ vậy. Nó là một kiểu dữ liệu tham chiếu được lưu trên heap
Bạn làm ơn nói rõ hơn được không, mình mới học qua c, chưa học c++ nên cũng chẳng hiểu lắm.
Nói nôm na Delegate nó là một kiểu dữ liệu tham chiếu tương tự class vậy. Nó đóng gói địa chỉ của các hàm function. Khi gọi thực hiện Delegate thì hàm được đóng gói sẽ thực hiện. Delegate nó có thể truyền vào làm tham số cho hàm còn Function thì k
using System;
namespace Delegatest
{
class Program
{
public delegate void SayAnything();//tạo delegate không tham số , trả về void
static void Main(string[] args)
{
Program p = new Program();//tạo thể hiện của Program để dùng non-static member trong Main
SayAnything sayHello = new SayAnything(p.Hello);//tạo thể hiện sayHello đóng gói hàm Hello
sayHello();//thực hiện sayHello -> thực hiện Hello
p.SaySomething(sayHello);//truyền sayHello (-> truyền hàm Hello) vào SaySomething
//ở đây, không thể viết p.Saysomething(Hello);
}
public void Hello()
{
Console.WriteLine("Hello");
}
public void SaySomething(SayAnything s)
{
s();//thực hiện delegate được truyền vào
}
}
}
Thanks bạn, mình cũng hiểu thêm được rồi
Mình có 1 bài viết khá dễ hiểu về callback và delegate trong C#, bạn có thể vào đây để đọc nhé:
Cảm ơn bạn. Mà bạn có bài nào về Event không cho mình xin luôn.
Event thật ra chỉ là 1 dạng wrapper của delegate thôi bạn. Thay vì gán delegate, event cho phép add, remove (+ -), ngoài ra với event thì chỉ class chứa chính event đó mới gọi nó được.
wrapper là gì vậy bạn?
cho mình hỏi chút, delegate nó hữu dụng trong hoàn cảnh nào nhỉ? như mình thấy trong ví dụ của bạn ở hàm main có đề cập:
Program p = new Program();
SayAnything sayHello = new SayAnything(p.Hello);
sayHello();
p.SaySomething(sayHello);
nhưng nếu dùng class là
Program p = new Program();
p.Hello;
cũng được mà? mình không rõ lắm mong bạn dựa trên kinh nghiệm giúp mình hiểu rõ hơn, tks
Khi một đối tượng sinh ra. Nó không thể biết về sự tồn tại và can thiệp được vào dữ liệu của đối tượng khác.
Nếu nó muốn dữ liệu bên trong nó được xử lý ở một nơi khác bên ngoài nó. Nơi mà nó không hề biết. Thì đó là chức năng chính của delegate.
Nếu nó muốn dữ liệu được tiếp tục xử lý ở nhiều nơi. Đó là chức năng của event.