Mọi dữ liệu được lưu trên Stack sẽ bị loại bỏ ngay khi hoàn thành phạm vi biến hoàn tất 1 phương thức, chương trình,….. Boxing và Unboxing Boxing là quá trình chuyển dữ liệu từ ki
Trang 1Các vấn đề cơ bản lập trình C#
Lập trình Windows
Trang 2Các vấn đề cần nắm
Kiểu dữ liệu trong C# (kỹ thuật boxing và unboxing)
Cơ chế delegate (ủy quyền)
Cơ chế event (sự kiện)
Lập trình với Thread (tiểu trình)
Nhập môn với winform
Trang 3Kiểu dữ liệu trong C#
C# là ngôn ngữ lập trình mạnh về kiểu dữ liệu
Chia thành 2 kiểu chủ yếu là: kiểu giá trị (value type, thông thường là struct như: int, char,…) và kiểu tham chiếu (reference type, thông thường là class như: string,…)
Kiểu giá trị được lưu trong vùng nhớ Stack
Kiểu tham chiếu được lưu trong vùng nhớ Heap (giá trị địa chỉ lưu trong Stack)
Trang 4Vùng nhớ Stack và Heap
Vùng nhớ Stack là vùng lưu trữ dữ liệu với kích thước cố định, riêng biệt cho mỗi chương trình Mọi dữ liệu được lưu trên Stack sẽ bị loại bỏ
ngay khi hoàn thành phạm vi biến (hoàn tất 1
phương thức, chương trình,…)
Vùng nhớ Heap là vùng lưu trữ dữ liệu có kích thước thay đổi và khá đồ sộ Dữ liệu trên Heap không bị loại bỏ khi biến tham chiếu đến đã hoàn thành phạm vi biến
Trang 5Boxing và Unboxing
Boxing là quá trình
chuyển dữ liệu từ kiểu
tham trị sang kiểu
tham chiếu Quá trình
có thể thực hiện
ngầm định
Trang 6Boxing và Unboxing
Unboxing là quá trình
ngược lại với boxing,
tức là đưa từ kiểu
tham chiếu ra kiểu
tham trị Quá trình
phải được thực hiện
tường minh (phải đảm
bảo đúng với kiểu dữ
liệu đã boxing)
Trang 7Delegate
Delegate là kiểu dữ liệu tham chiếu được dùng
để đóng gói một phương thức với tham số và
kiểu trả về xác định
Gần giống con trỏ hàm trong C++ nhưng là
hướng đối tượng, an toàn và bảo mật
Khai báo delegate trong namespace hoặc trong class
Ví dụ:
public delegate int CompareFunc( object obj1, object obj2);
Trang 8Delegate
Sử dụng delegate để xác định phương thức lúc thực thi
Cơ chế multicasting cho phép gọi hai hay nhiều phương thức thực thi thông qua một ủy quyền đơn Mục đích chính là có một ủy quyền có thể gọi thực hiện nhiều hơn một phương thức Để thực hiện được thì kiểu trả về của delegate phải
là kiểu void
Ví dụ:
myMulticastDelegate = Writer + Logger;
myMulticastDelegate += Transmitter;
Trang 9Event
Event (sự kiện) là các hành động xảy ra trong
quá trình chạy chương trình (gõ phím, click chuột, nhấn nút,…) và được thông báo để được xử lý
thích hợp
Event không thể biết trước chính xác khi nào xảy
ra, điều quan trọng là phải được xử lý thích hợp khi nó xảy ra
Trang 10Event
Cơ chế publishing và subscribing nghĩa là mỗi đối tượng đều có thể publish một tập hợp các event
để các lớp khác nếu cần xử lý khi nó xảy ra thì có thể đăng ký (subscribe) vào danh sách nhận và như vậy mỗi khi lớp publish đưa ra một sự kiện thì tất cả các lớp đã đăng ký sẽ được nhận thông báo
Trang 11Event
Trong NET cơ chế event được thực thi với
những delegate
Lớp publisher định nghĩa một delegate và những lớp subscriber phải thực thi Khi một sự kiện xuất hiện thì phương thức của lớp subscriber được gọi thông qua delegate
Một phương thức được dùng để xử lý các sự
kiện thì được gọi là trình xử lý sự kiện (event
handler)
Trang 12Event
Khai báo:
public delegate void myEventHandler ();
public event myEventHandler myEvent ;
hoặc
public EventHandler myEvent ;
Trang 13Thread
Với sức mạnh của CPU hiện nay thì hầu như các tác vụ thông thường (phép tính, di chuyển dữ
liệu,…) chỉ tiêu tốn một lượng nhỏ tài nguyên
CPU nhưng nếu theo nguyên lý đơn nhiệm thì lại chiếm riêng nguyên CPU (tức là các chương trình hay tác vụ khác phải chờ)
Thread (tiểu trình) là khái niệm trong cơ chế
chương trình đa nhiệm, đại diện cho một hay một nhóm các tác vụ con
Trang 14Thread
Trong chương trình đa nhiệm thì nhiều tiến trình
có thể chạy đồng thời để tận dụng triệt để tài
nguyên CPU
Giúp cho chương trình chạy mượt mà và nhanh chóng hơn