30/09/2018, 17:30

Cho mình hỏi về delegate trong c#

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.

GodOfGod viết 19:33 ngày 30/09/2018

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

Sơn viết 19:44 ngày 30/09/2018

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.

GodOfGod viết 19:39 ngày 30/09/2018

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
        }
    }
}
Sơn viết 19:46 ngày 30/09/2018

Thanks bạn, mình cũng hiểu thêm được rồi

Huy Hoàng Phạm viết 19:35 ngày 30/09/2018

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é:

Từ coder đến developer - Tôi đi code dạo – 10 Feb 15

Series C# hay ho: Callback trong C# – Delegate, Action, Predicate, Func

1. Nhắc lại về khái niệm callback Nếu chưa có khái niệm rõ ràng về callback, các bạn nên đọc bài viết về Callback trong javascript mà mình đã viết. Trong javascript, để callback, ta chỉ cần truyền …

Sơn viết 19:44 ngày 30/09/2018

Cảm ơn bạn. Mà bạn có bài nào về Event không cho mình xin luôn.

Huy Hoàng Phạm viết 19:42 ngày 30/09/2018

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.

Sơn viết 19:33 ngày 30/09/2018

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?

Phung Van Duc viết 19:39 ngày 30/09/2018

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

Văn Dương viết 19:34 ngày 30/09/2018

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.

Bài liên quan
0