Sư phụ dạy rất dễ hiểu, một số kênh khác nói rất nhanh và lằng nhằng nhưng cách truyền đạt của sư phụ bình tĩnh và không gây rối, subcribe thôi mọi người!!!
@@SatLinh0901 Theo khái niệm của C++ thì nó là một con trỏ (function pointer), function pointer là một trong những khái niệm nhỏ bên trong chủ đề function object. Có thể hiểu function object nôm na như sau: Nó còn được gọi là Functor, tức là gọi đối tượng như một function, mà không cần phải tạo ra đối tượng từ lớp thông qua quá tải toán tử (). Khái niệm này xuất phát khi người ta đang triển khai với C++ để xây dựng tiền đề cho CallBack và cũng như std::binding,... Hiểu đơn giản rằng nó sẽ tạo ra 1 đối tượng tạm thời và triển khai phương thức cần thiết thông qua đối tượng tạm thời đó ngay tại thời điểm thực thi chương trình. Từ đó họ đã xây dựng ra function pointer để nó đúng ra không phải chỉ trỏ tới 1 hàm thông thường, mà rộng hơn là nó đang trỏ tới chính 1 function object, hay chi tiết hơn là có thể trỏ đến một phương thức của 1 đối tượng mà không cần tạo ra 1 đối tượng từ lớp tương ứng. Điều này cũng giống như std::binding trong C++, std::binding sẽ return hay còn có thể nói là được trỏ đến bởi 1 function pointer. Điều này càng khẳng định hơn khi lambdas expression là một function object và function pointer có thể handle cả được lambdas expression. Trong C# và cũng như JS thì con trỏ đã được hide đi để giảm thiểu việc gây lú trong lập trình, thay vào đó họ sẽ dùng tham trị và tham chiếu. Như vậy điều này cần phải có sự hình thành của object cụ thể, do đó khi đã khởi tạo delegate và phải xem nó như là 1 lớp. Đã là lớp thì phải có đối tượng cụ thể được sinh ra từ lớp. Vậy mới có thể dùng nó như một tham trị hoặc tham chiếu ở dạng parameters. Theo mình thấy nên xem nó là "con trỏ" trong ngoặc kép để dễ hình dung từ tư duy C++.
anh ơi cho em hỏi chút là mình có thể sử dụng tên của delegate như 1 tên hàm, ví du; Funcsum = (int a, int b) => a+b; int x = sum.invoke(1,2); console.writeline(x); // chạy được console.writeline(sum(1,2)); // vẫn chạy được Vậy thì tại sao lại phải sử dụng invoke ạ?
ví dụ thôi bạn, thầy ví dụ cho bạn hiểu thêm khi gán sum = kiểu delegate (method tính tổng) , rồi dùng sum.invoke gọi ra method gán cho sum để bạn thấy thôi
sum.invoke(1,2) biến trả về kiểu int thì int x =sum.invoke(1,2), hay console.writeline (sum(1,2)) cái sum (1,2) ở đây khai bao kiểu lamda có biến trả về cũng kiểu int tương đương nhau cả thôi
Các bạn đăng ký theo dõi ủng hô kênh nhé, cảm ơn các bạn ruclips.net/user/xuanthulab
Sư phụ dạy rất dễ hiểu, một số kênh khác nói rất nhanh và lằng nhằng nhưng cách truyền đạt của sư phụ bình tĩnh và không gây rối, subcribe thôi mọi người!!!
Cám ơn thầy. Bài giảng rất dễ hiểu
anh em đã học callback và arrow func trong js qua học này nhanh cực
Rất dễ hiểu cảm ơn anh!
Select() giống map trong js nhận vào 1 callback trả về 1 mảng mới sau khi biến đổi
delegate phải như callback ko ban,sao có mấy chỗ kêu delegate là con trỏ
@@SatLinh0901 Theo khái niệm của C++ thì nó là một con trỏ (function pointer), function pointer là một trong những khái niệm nhỏ bên trong chủ đề function object. Có thể hiểu function object nôm na như sau: Nó còn được gọi là Functor, tức là gọi đối tượng như một function, mà không cần phải tạo ra đối tượng từ lớp thông qua quá tải toán tử (). Khái niệm này xuất phát khi người ta đang triển khai với C++ để xây dựng tiền đề cho CallBack và cũng như std::binding,... Hiểu đơn giản rằng nó sẽ tạo ra 1 đối tượng tạm thời và triển khai phương thức cần thiết thông qua đối tượng tạm thời đó ngay tại thời điểm thực thi chương trình.
Từ đó họ đã xây dựng ra function pointer để nó đúng ra không phải chỉ trỏ tới 1 hàm thông thường, mà rộng hơn là nó đang trỏ tới chính 1 function object, hay chi tiết hơn là có thể trỏ đến một phương thức của 1 đối tượng mà không cần tạo ra 1 đối tượng từ lớp tương ứng. Điều này cũng giống như std::binding trong C++, std::binding sẽ return hay còn có thể nói là được trỏ đến bởi 1 function pointer. Điều này càng khẳng định hơn khi lambdas expression là một function object và function pointer có thể handle cả được lambdas expression.
Trong C# và cũng như JS thì con trỏ đã được hide đi để giảm thiểu việc gây lú trong lập trình, thay vào đó họ sẽ dùng tham trị và tham chiếu. Như vậy điều này cần phải có sự hình thành của object cụ thể, do đó khi đã khởi tạo delegate và phải xem nó như là 1 lớp. Đã là lớp thì phải có đối tượng cụ thể được sinh ra từ lớp. Vậy mới có thể dùng nó như một tham trị hoặc tham chiếu ở dạng parameters. Theo mình thấy nên xem nó là "con trỏ" trong ngoặc kép để dễ hình dung từ tư duy C++.
idol mãi đỉnh
Rất dễ hiểu, cảm ơn bạn rất nhiều
Mình vaò trang web... cần hỗ trợ.. gửi yêu cầu nhưng trang web bị lỗi thì phaỉ
Thanks
select == map, where == filter trong js có phải không thầy?
Cảm ơn thầy. Rất dễ hiểu ạ
Thầy giảng rất hay ạ. Cám ơn thầy
Rất dễ hiểu. Mong a ra thêm nhiều video nữa
Cảm ơn anh, hay quá!
Lamda expression này na ná giống callback function trong JS anh nhỉ
arrow function chứ
@@trandinhthang5778 delegate phải như callback ko ban,sao có mấy chỗ kêu delegate là con trỏ
@@SatLinh0901 vầng, là con trỏ trỏ tới phương thức
giống callback bên js quá
anh ơi cho em hỏi chút là mình có thể sử dụng tên của delegate như 1 tên hàm, ví du;
Funcsum = (int a, int b) => a+b;
int x = sum.invoke(1,2); console.writeline(x); // chạy được
console.writeline(sum(1,2)); // vẫn chạy được
Vậy thì tại sao lại phải sử dụng invoke ạ?
ví dụ thôi bạn, thầy ví dụ cho bạn hiểu thêm khi gán sum = kiểu delegate (method tính tổng) , rồi dùng sum.invoke gọi ra method gán cho sum để bạn thấy thôi
sum.invoke(1,2) biến trả về kiểu int thì int x =sum.invoke(1,2), hay console.writeline (sum(1,2)) cái sum (1,2) ở đây khai bao kiểu lamda có biến trả về cũng kiểu int tương đương nhau cả thôi
:')) . Không biết tại sao mình dùng select bị báo lỗi nữa . Mọi người có thể gợi ý được ko ạ
à à . Mình quên thêm thư viện :')) . ngáo thật.
@@andreatran4520 Thêm thư viện gì vậy và có extension nào tự động thêm ko ạ ?
Thanks ad ạ