ĐHQG HCM – TRƯỜNG ĐH KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN C# căn bản Lập trình ứng dụng quản lý 1 Ngô Chánh Đức Nội dung .NET Framework C# cơ bản Coding convention Hướng đối tượng Collection Delegate 9/26/2017 C# căn bản - LTUDQL1 2 .NET Framework 9/26/2017 C# căn bản - LTUDQL1 3 Giới thiệu Ra đời năm 2002 cùng với bộ công cụ lập trình Visual Studio .NET Sử dụng kỹ thuật hướng đối tượng Hỗ trợ chuẩn Unicode Thi hành trên máy ảo CLR (Common Language Runtime) Bao gồm hơn 5000 lớp đối tượng Cung cấp bộ trình điều khiển đồ sộ (giao diện đồ họa) Hỗ trợ dịch vụ quản lý bộ nhớ và nhiều dịch vụ khác 9/26/2017 C# căn bản - LTUDQL1 4 Kiến trúc .NET Framework 9/26/2017 C# căn bản - LTUDQL1 5 Cơ chế thực thi 9/26/2017 C# căn bản - LTUDQL1 6 Kiến trúc .NET Framework 9/26/2017 C# căn bản - LTUDQL1 7 Ứng dụng .NET Framework Ứng dụng dòng lệnh (Console Application) Ứng dụng WinForm (Windows Form Application) Ứng dụng WPF (WPF Application) Ứng dụng web (ASP.NET Web Form Application) Thư viện DLL (Class Library) 9/26/2017 C# căn bản - LTUDQL1 8 Đọc thêm Kiến trúc .NET Framework: http://www.com/UploadFile/puranindia/net-framework- and-architecture/ 9/26/2017 C# căn bản - LTUDQL1 9 C# căn bản 9/26/2017 C# căn bản - LTUDQL1 10 Giới thiệu Phát triển bởi Microsoft Xuất hiện năm 2000 Phiên bản mới nhất là C# 7.0 Là ngôn ngữ lập trình cấp cao, hiện đại, hướng đối tượng và an toàn kiểu (type-safe) Có nguồn gốc từ C Cú pháp có phần quen thuộc với C, C++, Java, … Tập tin mã nguồn có đuôi mở rộng là .cs Sử dụng Visual Studio để lập trình 9/26/2017 C# căn bản - LTUDQL1 11 Hello world using System; class Hello { static void Main() { Console.cs } } 9/26/2017 C# căn bản - LTUDQL1 12 Bắt đầu với C# Biên dịch Chạy gỡ rối (Debug) và chạy không gỡ rối (Run without debug) Chế độ Release/Debug Chạy gỡ rối ▪Breakpoint ▪Step In / Step out / Step over ▪Watch / Auto watch / Local watch 9/26/2017 C# căn bản - LTUDQL1 13 Cấu trúc lập trình Chương trình (Program) Tên miền (namespace) Kiểu dữ liệu (type) Thành viên (member) Hợp ngữ (assembly) 9/26/2017 C# căn bản - LTUDQL1 14 Kiểu dữ liệu Kiểu Kiểu tham chiếu giá trị 9/26/2017 C# căn bản - LTUDQL1 15 Các kiểu dữ liệu số Signed Integral ▪sbyte: 8 bits, range from -128 to 127 ▪short: 16 bits, range from -32,768 to 32,767 ▪int : 32 bits, range from -2,147,483,648 to 2,147,483,647 ▪long : 64 bits, range from – 9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 9/26/2017 C# căn bản - LTUDQL1 16 Các kiểu dữ liệu số Unsigned integral ▪byte : 8 bits, range from 0 to 255 ▪ushort : 16 bits, range from 0 to 65,535 ▪uint : 32 bits, range from 0 to 4,294,967,295 ▪ulong : 64 bits, range from 0 to 18,446,744,073,709,551,615 9/26/2017 C# căn bản - LTUDQL1 17 Các kiểu dữ liệu số Floating point ▪float : 32 bits, range from 1.4 × 1038, 7-digit precision ▪double : 64 bits, range from 5.7 × 10308, 15-digit precision Decimal ▪decimal : 128 bits, range is at least –7.
TỔNG QUAN HỌC THUẬT VỀ TÀI LIỆU BÀI GIẢNG "C# CĂN BẢN – LẬP TRÌNH ỨNG DỤNG QUẢN LÝ 1"
Tổng quan về giáo trình
Tài liệu bài giảng "C# căn bản" là tài liệu học tập thuộc học phần Lập trình ứng dụng quản lý 1 (LTUDQL1), được biên soạn bởi giảng viên Ngô Chánh Đức thuộc Khoa Công nghệ Thông tin, Trường Đại học Khoa học Tự nhiên – Đại học Quốc gia Thành phố Hồ Chí Minh (ĐHQG-HCM). Trong chương trình đào tạo Cử nhân Công nghệ Thông tin, học phần này giữ vai trò là môn học cơ sở chuyên ngành, trang bị kiến thức nền tảng về ngôn ngữ lập trình C# và môi trường thực thi .NET Framework nhằm chuẩn bị cho việc xây dựng các hệ thống phần mềm quản lý.
Mục tiêu học tập của tài liệu tập trung vào việc giúp người học:
- Nắm vững kiến trúc và cơ chế thực thi của .NET Framework cùng máy ảo CLR (Common Language Runtime).
- Làm chủ cú pháp ngôn ngữ C# (phiên bản C# 7.0), hệ thống kiểu dữ liệu tĩnh an toàn (type-safe), các cấu trúc điều khiển và toán tử nâng cao.
- Hiểu rõ cơ chế phân bổ bộ nhớ giữa kiểu giá trị (Value Type) và kiểu tham chiếu (Reference Type), bao gồm kỹ thuật Boxing và Unboxing.
- Ứng dụng thành thạo các kỹ thuật lập trình hướng đối tượng thông qua việc xây dựng Lớp (Class), Cấu trúc (Struct), Phương thức (Method) và xử lý dữ liệu phức tạp (String, DateTime, Array).
Cấu trúc tài liệu được thiết kế theo lộ trình sư phạm tuần tự gồm 6 chủ đề chính: .NET Framework, C# cơ bản, Coding convention, Hướng đối tượng, Collection, và Delegate. Tài liệu có đặc điểm là trình bày trực diện, cô đọng dưới dạng slide bài giảng, kết hợp các đoạn mã nguồn mẫu (code snippets) cụ thể và hệ thống bài tập thực hành thao tác dữ liệu.
Nội dung kiến thức cốt lõi
Các chương và chủ đề chính
Tài liệu bao quát 6 khối kiến thức trọng tâm với tính liên kết logic chặt chẽ:
-
Tổng quan về .NET Framework:
- Lịch sử hình thành: Ra đời năm 2002 đi kèm bộ công cụ Visual Studio .NET.
- Đặc tính hệ thống: Hỗ trợ kỹ thuật hướng đối tượng, chuẩn Unicode, thư viện hơn 5.000 lớp đối tượng, bộ trình điều khiển giao diện đồ họa và dịch vụ tự động quản lý bộ nhớ.
- Cơ chế thực thi: Hoạt động trên nền tảng máy ảo CLR.
- Mô hình ứng dụng: Hỗ trợ Console Application, Windows Forms (WinForm), Windows Presentation Foundation (WPF), ASP.NET Web Forms và Thư viện liên kết động (Class Library - DLL).
-
Cú pháp C# căn bản và Quy trình phát triển:
- Đặc điểm ngôn ngữ: Ngôn ngữ cấp cao, hướng đối tượng, an toàn kiểu, phát triển bởi Microsoft từ năm 2000, cập nhật đến phiên bản C# 7.0; phần mở rộng tệp là
.cs. - Cấu trúc chương trình: Tổ chức phân cấp gồm Hợp ngữ (Assembly), Tên miền (Namespace), Kiểu dữ liệu (Type), Thành viên (Member) và Chương trình (Program).
- Quy trình biên dịch và gỡ lỗi (Debugging) trên Visual Studio: Chế độ Debug/Release, thiết lập Điểm dừng (Breakpoint), các thao tác duyệt mã (Step In, Step Over, Step Out) và cửa sổ theo dõi biến (Watch, Auto Watch, Local Watch).
- Đặc điểm ngôn ngữ: Ngôn ngữ cấp cao, hướng đối tượng, an toàn kiểu, phát triển bởi Microsoft từ năm 2000, cập nhật đến phiên bản C# 7.0; phần mở rộng tệp là
-
Hệ thống Kiểu dữ liệu, Biến và Bộ nhớ:
- Phân loại kiểu dữ liệu: Kiểu giá trị (Value type) và Kiểu tham chiếu (Reference type).
- Hệ thống số nguyên có dấu (Signed Integral):
sbyte(8-bit, -128 đến 127),short(16-bit, -32.768 đến 32.767),int(32-bit, -2.147.483.648 đến 2.147.483.647),long(64-bit, xấp xỉ $\pm 9.22 \times 10^{18}$). - Hệ thống số nguyên không dấu (Unsigned Integral):
byte(8-bit, 0 đến 255),ushort(16-bit, 0 đến 65.535),uint(32-bit, 0 đến 4.294.967.295),ulong(64-bit, 0 đến $1.84 \times 10^{19}$). - Số thực và số thập phân chính xác cao:
float(32-bit, độ chính xác 7 chữ số),double(64-bit, độ chính xác 15 chữ số),decimal(128-bit, độ chính xác tối thiểu 28 chữ số). - Cơ chế chuyển đổi kiểu: Ép kiểu ngầm định (Implicit cast), ép kiểu tường minh (Explicit cast) và chuyển đổi Boxing/Unboxing giữa Value type và
object.
-
Hệ thống Toán tử và Cấu trúc điều khiển:
- Toán tử C#: Toán tử tham chiếu (
.,(),[],new,->), toán tử số học, logic, điều kiện, kiểm tra kiểu (is,as,typeof), toán tử bitwise và gán. - Toán tử mở rộng: Toán tử điều kiện 3 ngôi (
?:), toán tử kiểm tra Null (Null-coalescing??), kiểu dữ liệu cho phép nhận giá trị null (Nullable typeint?), và cú pháp biểu thức Lambda (=>) cho phương thức ẩn danh. - Cấu trúc điều khiển: Rẽ nhánh (
if...else if...else,switch...case...default), vòng lặp tuần tự (for,foreach,while,do...while), câu lệnh điều hướng luồng thực thi (break,continue).
- Toán tử C#: Toán tử tham chiếu (
-
Xử lý Dữ liệu Văn bản (String) và Thời gian (DateTime):
- Chuỗi ký tự (String): Chuỗi ký tự literal, chuỗi nguyên bản (Verbatim string
@""), hệ thống ký tự thoát (Escape codes:\n,\t,\r,\b,\a,\xhh,\v,\\,\"...). - Thao tác chuỗi: Định dạng hiển thị bằng
String.Formatvà nội suy chuỗi (String interpolation$"{x} - {y}"), so sánh hiệu năng nối chuỗi giữa toán tử+vàStringBuilder, các phương thức trích xuấtString.Split,String.LastIndexOf. - Cấu trúc
DateTime: Khởi tạo giá trị thời gian, lấy thời gian thực (DateTime.Now), chuyển đổi chuỗi thành ngày giờ (DateTime.Parse,Convert.ToDateTime) kết hợp chuẩn văn hóa đa quốc gia (IFormatProvider,CultureInfo).
- Chuỗi ký tự (String): Chuỗi ký tự literal, chuỗi nguyên bản (Verbatim string
-
Lập trình Hướng đối tượng: Lớp (Class), Cấu trúc (Struct), Phương thức và Mảng:
- So sánh Class và Struct: Class đại diện cho đối tượng phức tạp (kiểu tham chiếu), Struct đại diện cho cấu trúc dữ liệu phức tạp (kiểu giá trị).
- Thành phần bên trong Class/Struct: Field, Property, Method, Constructor, Finalizer, Constant, Event, Indexer, Operator, Nested Type.
- Tính chất hướng đối tượng: Phạm vi truy cập (Accessibility), Tính kế thừa và Đa hình (Inheritance - Polymorphism), Lớp trừu tượng (Abstract class), Giao diện (Interface), Kiểu Generic, Kiểu Static, Kiểu Partial.
- Định nghĩa phương thức nâng cao: Tham số với số lượng biến thiên (
params), tham số đầu ra (out). - Mảng dữ liệu: Mảng một chiều (
int[]), mảng hai chiều (int[,]), mảng đa chiều (int[,,]).
Kiến thức nền tảng được xây dựng
- Mô hình kiến trúc máy ảo và quản lý bộ nhớ: Phân tích vai trò của Common Language Runtime (CLR) trong việc quản lý chu kỳ sống của ứng dụng, dịch vụ dọn rác bộ nhớ và thực thi mã trung gian.
- Hệ thống kiểu dữ liệu và mô hình phân bổ bộ nhớ: Xác lập sự khác biệt bản chất giữa Stack (lưu trữ Value types, Structs) và Heap (lưu trữ Reference types, Classes), giải thích chi tiết cơ chế đóng gói (Boxing) giá trị lên Heap và mở gói (Unboxing) về Stack.
- Nguyên lý đóng gói và trừu tượng hóa: Hướng dẫn xây dựng các thành phần lớp để bảo vệ trạng thái dữ liệu và cung cấp giao diện hành vi chuẩn mực.
Kỹ năng phát triển
- Kỹ năng lập trình và kiểm soát cú pháp: Viết mã nguồn đúng chuẩn cú pháp C# 7.0, tuân thủ các quy tắc đặt tên và cấu trúc tệp (Coding convention).
- Kỹ năng gỡ lỗi phần mềm (Debugging): Thành thạo thao tác dò lỗi từng bước (Step In, Step Over, Step Out), đặt điểm dừng logic (Breakpoint) và giám sát biến thông qua các cửa sổ Watch trên Visual Studio.
- Kỹ năng thuật toán xử lý chuỗi và mảng: Khả năng phân tích, chuẩn hóa văn bản, sắp xếp danh sách mảng (thuật toán nổi bọt - Bubble sort) và định dạng hiển thị bảng số liệu đa cột.
Phương pháp giảng dạy và học tập
Tiếp cận sư phạm
Tài liệu sử dụng phương pháp giảng dạy theo cấu trúc xoắn ốc (Spiral Approach):
- Đi từ bối cảnh công nghệ tổng quan (.NET Framework, CLR).
- Tiếp cận cú pháp cơ sở (kiểu dữ liệu, biểu thức, toán tử, rẽ nhánh, lặp).
- Nâng cao dần đến cơ chế bộ nhớ, xử lý cấu trúc dữ liệu chuyên biệt (String, DateTime, Array).
- Hoàn thiện ở cấp độ trừu tượng hóa hướng đối tượng (Class, Struct, Method signatures).
Hệ thống bài tập thực hành
Tài liệu cung cấp hệ thống 8 bài tập lập trình chuỗi ký tự mang tính áp dụng trực tiếp:
- Thống kê tần suất xuất hiện của từng từ trong chuỗi văn bản nhập vào.
- Chuẩn hóa chuỗi họ và tên (loại bỏ khoảng trắng thừa ở đầu, cuối và giữa các từ; viết hoa chữ cái đầu mỗi từ, viết thường các ký tự còn lại).
- Phân tích chuỗi đường dẫn tệp tin (ví dụ:
"C:\Documents\Photos\Test.jpg") để trích xuất: a) Thư mục chứa tệp, b) Tên tệp, c) Phần mở rộng của tệp. - Đếm số lượng ký tự alphabet, ký số và các ký hiệu đặc biệt trong chuỗi.
- Đếm số lượng nguyên âm và phụ âm trong chuỗi ký tự.
- Cài đặt giải thuật sắp xếp nổi bọt (Bubble sort) để sắp xếp một danh sách chuỗi ký tự.
- Kiểm tra sự tồn tại của chuỗi con $B$ trong chuỗi $A$.
- Nhập chuỗi họ và tên đầy đủ, thực hiện tách riêng phần "Họ" và phần "Tên".
DANH MỤC 8 BÀI TẬP CHUỖI
Phương pháp đánh giá và tự học
- Đánh giá năng lực: Thông qua khả năng chuyển đổi đặc tả bài toán thành mã lệnh C# thực thi được, xử lý chính xác các trường hợp biên (như xử lý chuỗi rỗng, lỗi tràn kiểu số, định dạng ngày tháng không khớp).
- Hướng dẫn tự học: Tài liệu định hướng người học nghiên cứu tài liệu kỹ thuật chuẩn từ Microsoft Docs (về Class, Struct,
StringBuilder), thực hành các bài tập lập trình bổ trợ từ các cổng thông tin chuyên đề (như W3Resource, C# Station).
Điểm nổi bật và cập nhật
Cập nhật công nghệ trong giáo trình
- Tích hợp tính năng của C# 7.0: Đưa vào chương trình các cú pháp hiện đại như nội suy chuỗi (
$"..."), biểu thức Lambda định nghĩa phương thức một dòng ((int x) => x * 2), kiểu Nullable (int?) và toán tử gán mặc định khi biến null (??). - Phân biệt chuyên sâu cơ chế hệ thống: Phân tích ranh giới kỹ thuật giữa
Class(Reference type) vàStruct(Value type) không chỉ ở góc độ cú pháp mà ở góc độ quản lý bộ nhớ và mô hình hóa dữ liệu (Class dùng cho đối tượng phức tạp, Struct dùng cho dữ liệu phức tạp). - Kỹ thuật định dạng chuỗi nâng cao: Trình bày chi tiết việc căn chỉnh lề và định dạng số liệu chuyên nghiệp thông qua
String.Format(ví dụ định dạng bảng dân số đô thị qua các năm với quy chuẩnN0,P1,yyyy) và chuyển đổi ngày tháng thích ứng theo mã vùng văn hóa (CultureInfo("fr-FR")).
BẢNG SO SÁNH CLASS VÀ STRUCT
Đối tượng sử dụng giáo trình
-
Sinh viên đại học:
- Sinh viên năm thứ hai hoặc năm thứ ba chuyên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm, Hệ thống Thông tin tham gia học phần Lập trình ứng dụng quản lý 1.
- Người học cần nắm vững nền tảng phát triển ứng dụng trên hệ sinh thái Microsoft .NET.
-
Yêu cầu điều kiện tiên quyết (Prerequisites):
- Người học cần hoàn thành các học phần Nhập môn lập trình hoặc Kỹ thuật lập trình cơ bản (C/C++).
- Có hiểu biết về tư duy thuật toán cơ bản, cấu trúc dữ liệu và logic điều khiển chương trình.
-
Giảng viên và Người tự học:
- Giảng viên sử dụng tài liệu làm khung đề cương bài giảng lý thuyết và hệ thống bài tập thực hành trên phòng máy.
- Lập trình viên chuyển đổi từ các ngôn ngữ khác (C++, Java) sang nền tảng .NET sử dụng để tra cứu cú pháp và cơ chế đặc thù của C#.
Câu hỏi thường gặp
1. Giáo trình này phù hợp với ai?
Tài liệu được thiết kế cho sinh viên ngành Công nghệ Thông tin tại Trường ĐH Khoa học Tự nhiên – ĐHQG HCM đang học môn Lập trình ứng dụng quản lý 1, cũng như người học cần tài liệu chuẩn hóa về C# căn bản và .NET Framework.
2. Cần kiến thức nền nào trước khi học tài liệu này?
Người học cần có kiến thức cơ bản về lập trình thủ tục (như C hoặc C++), hiểu về biến, kiểu dữ liệu, vòng lặp, hàm và tư duy giải thuật cơ bản.
3. Điểm khác biệt căn bản giữa Class và Struct được giáo trình nêu ra là gì?
Class là kiểu tham chiếu (Reference type), phân bổ bộ nhớ trên Heap và dùng để biểu diễn các đối tượng phức tạp có tính kế thừa; trong khi Struct là kiểu giá trị (Value type), phân bổ bộ nhớ trên Stack và dùng để biểu diễn các tập hợp dữ liệu phức tạp nhẹ.
4. Quy trình gỡ rối (Debug) được hướng dẫn trong tài liệu gồm những gì?
Tài liệu hướng dẫn sử dụng công cụ Visual Studio với các kỹ thuật: đặt Breakpoint, chạy từng bước mã lệnh (Step In, Step Over, Step Out) và giám sát giá trị biến thời gian thực thông qua các cửa sổ Watch, Auto Watch và Local Watch.
5. Có những tài liệu tham khảo bổ trợ nào được giảng viên đề xuất?
Tài liệu trích dẫn các nguồn tham khảo trực tuyến chính thức từ Microsoft Docs (chuyên mục classes-and-structs và stringbuilder), tài liệu kiến trúc .NET Framework từ Puranindia, hướng dẫn cú pháp CSharp Station và hệ thống bài tập W3Resource.
Kết luận
Bài giảng "C# căn bản" thuộc học phần Lập trình ứng dụng quản lý 1 do ThS. Ngô Chánh Đức (Khoa CNTT, ĐH KHTN – ĐHQG HCM) biên soạn cung cấp hệ thống kiến thức nền tảng, chuẩn xác về ngôn ngữ C# và .NET Framework. Nội dung kết hợp hài hòa giữa cơ chế vận hành máy ảo (CLR), quản lý bộ nhớ (Value/Reference type, Boxing/Unboxing), kỹ thuật lập trình hướng đối tượng và kỹ năng xử lý dữ liệu thực tế.
Lộ trình học tập đề xuất:
- Tiếp thu kiến trúc .NET và làm chủ quy trình biên dịch/gỡ lỗi trên Visual Studio.
- Hoàn thành 8 bài tập xử lý chuỗi và mảng để thành thạo giải thuật cơ bản.
- Vận dụng kiến thức Lớp/Cấu trúc để xây dựng các mô hình dữ liệu hướng đối tượng chuẩn bị cho các ứng dụng giao diện WinForm/WPF trong các học phần tiếp theo.