Xem mẫu

  1. TRƯỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG KHOA CÔNG NGHỆ THÔNG TIN NGUYỄN VĂN TOÁN BÀI GIẢNG LẬP TRÌNH C# Quảng Ngãi, 2018
  2. TRƯỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG KHOA CÔNG NGHỆ THÔNG TIN NGUYỄN VĂN TOÁN BÀI GIẢNG LẬP TRÌNH C# (DÙNG CHO SINH VIÊN BẬC ĐẠI HỌC NGÀNH CÔNG NGHỆ THÔNG TIN VÀ SƯ PHẠM TIN HỌC) LƯU HÀNH NỘI BỘ
  3. LỜI NÓI ĐẦU Lập trình C# là môn học tìm hiểu các kiến thức cơ bản về lập trình xây dựng ứng dụng bằng ngôn ngữ lập trình C#. Nội dung cơ bản của môn học này giới thiệu các kiến thức cơ bản của C#, hướng đối tượng trong C#, các điều khiển hỗ trợ thiết kế giao diện và các điều khiển hỗ trợ truy cập CSDL, in kết quả. Bài giảng được biên soạn và giảng dạy cho sinh viên ngành Công nghệ thông tin với sinh viên đã có kiến thức cơ bản về lập trình, lập trình hướng đối tượng, hệ quản trị cơ sở dữ liệu Microsoft SQL Server. Vì thế, những nội dung liên quan đến các phần kiến thức này trong bài giảng chủ yếu là tóm tắt, nhắc lại. Ngôn ngữ C# hiện đang được cập nhật thường xuyên. Qua mỗi phiên bản, mẫu lập trình được thay đổi theo hướng tiện lợi hơn và các công nghệ mới, hiện đại được bổ sung vào. Hiện nay, phạm vi kiến thức của ngôn ngữ C# rất rộng. Nội dung kiến thức được trình bày trong bài giảng này chỉ mới đề cập ngang phiên bản .NET Framework 2.0. Mong rằng, qua bài giảng này, sinh viên có thể nắm bắt được những vấn đề cốt lõi của ngôn ngữ lập trình C# để làm cơ sở cho việc nghiên cứu sâu hơn về ngôn ngữ lập trình này. Bài giảng không sao tránh khỏi những thiếu sót. Mong các thầy cô và các bạn sinh viên đóng góp ý kiến để hoàn thiện hơn trong những lần chỉnh sửa sau. Xin chân thành cảm ơn. Quảng Ngãi, tháng 11 năm 2018 Nguyễn Văn Toán i
  4. MỤC LỤC Chương 1: Giới thiệu Microsoft .NET, cơ sở của ngôn ngữ C# .................... 1 1.1. Tổng quan Microsoft .NET ................................................................. 1 1.1.1. Kiến trúc .NET framework ..................................................... 1 1.1.2. Biên dịch và ngôn ngữ trung gian .......................................... 3 1.2. Giới thiệu ngôn ngữ C# ...................................................................... 4 1.2.1. Chương trình đầu tiên ............................................................. 4 1.2.2. Kiểu dữ liệu, biểu thức, câu lệnh ............................................ 6 1.2.3. Chú thích ............................................................................... 12 1.2.4. Các cấu trúc dữ liệu .............................................................. 13 1.3. Câu hỏi và bài tập ............................................................................. 16 1.4. Bài mẫu ............................................................................................. 17 Chương 2: Hướng đối tượng trong C# ........................................................... 20 2.1. Lớp, đối tượng................................................................................... 20 2.1.1. Các thành phần của lớp......................................................... 21 2.1.2. Phạm vi truy cập của lớp ...................................................... 21 2.1.3. Ví dụ về lớp .......................................................................... 22 2.2. Không gian tên, lệnh using ............................................................... 24 2.2.1. Không gian tên ...................................................................... 24 2.2.2. Lệnh using ............................................................................ 25 2.2.3. Bí danh của không gian tên .................................................. 25 2.3. Quản lý ngoại lệ ................................................................................ 26 2.3.1. Cấu trúc của một ngoại lệ ..................................................... 26 2.3.2. Ném ngoại lệ ......................................................................... 27 2.3.3. Bắt ngoại lệ ........................................................................... 27 2.4. Một số lớp thông dụng ...................................................................... 29 2.4.1. List ........................................................................................ 29 2.4.2. String..................................................................................... 30 2.4.3. StreamReader, StreamWriter ................................................ 31 2.5. Câu hỏi và bài tập ............................................................................. 33 2.6. Bài mẫu ............................................................................................. 34 ii
  5. Chương 3: Ứng dụng Windows trong C# ...................................................... 39 3.1. Giao diện ứng dụng và các điều khiển thông dụng .......................... 39 3.1.1. Giao diện ứng dụng .............................................................. 39 3.1.2. Các điều khiển thông dụng trên Form .................................. 43 3.2. Một số hộp thoại thông dụng ............................................................ 46 3.2.1. MessageBox .......................................................................... 46 3.2.2. OpenDialog ........................................................................... 47 3.3. Menu, ToolStrip ................................................................................ 47 3.3.1. Menu ..................................................................................... 47 3.3.2. ToolStrip ............................................................................... 47 3.4. Câu hỏi và bài tập ............................................................................. 48 3.5. Bài mẫu ............................................................................................. 49 Chương 4: Quản lý dữ liệu với Microsoft SQL Server ................................ 56 4.1. Các khái niệm về cơ sở dữ liệu trong MS SQL Server .................... 56 4.1.1. Các khái niệm về cơ sở dữ liệu............................................. 56 4.1.2. Khái niệm về cơ sở dữ liệu trong MS SQL Server .............. 57 4.2. Ngôn ngữ SQL .................................................................................. 57 4.2.1. Các câu lệnh SQL ................................................................. 58 4.2.2. Kiểu dữ liệu .......................................................................... 58 4.2.3. Toán tử .................................................................................. 60 4.2.4. Một số hàm thường dùng ...................................................... 61 4.2.5. Các câu lệnh SQL thường dùng............................................ 62 4.3. Câu hỏi và bài tập ............................................................................. 65 4.4. Bài mẫu ............................................................................................. 65 Chương 5: Truy cập cơ sở dữ liệu với ADO.NET......................................... 67 5.1. Mô hình kết nối và truy cập dữ liệu với ADO.NET ......................... 67 5.1.1. Mô hình kết nối và truy cập dữ liệu tổng quát ..................... 67 5.1.2. Connection ............................................................................ 68 5.1.3. Kết nối đến cơ sở dữ liệu ...................................................... 69 5.1.4. Transaction ........................................................................... 70 5.2. Mô hình truy cập dữ liệu với Command ........................................... 71 5.2.1. Command .............................................................................. 71 iii
  6. 5.2.2. DataReader ........................................................................... 72 5.3. Mô hình truy cập dữ liệu nâng cao với cơ sở dữ liệu ảo .................. 73 5.3.1. DataSet .................................................................................. 73 5.3.2. DataAdapter .......................................................................... 74 5.4. Buộc dữ liệu ...................................................................................... 75 5.4.1. Mô hình truy cập và hiển thị dữ liệu .................................... 75 5.4.2. Buộc dữ liệu .......................................................................... 76 5.5. Câu hỏi và bài tập ............................................................................. 77 5.6. Bài mẫu ............................................................................................. 78 Chương 6: Report và đóng gói ứng dụng....................................................... 90 6.1. Report ................................................................................................ 90 6.1.1. Tổng quan về Report ............................................................ 90 6.1.2. Tiến trình xây dựng Report .................................................. 91 6.1.3. Các công cụ hỗ trợ tạo Report .............................................. 91 6.2. Đóng gói ứng dụng ........................................................................... 96 6.2.1. Lợi ích ................................................................................... 96 6.2.2. Các thành phần đưa vào gói ứng dụng ................................. 96 6.2.3. Setup Project ......................................................................... 97 6.3. Câu hỏi và bài tập ............................................................................. 97 6.4. Bài mẫu ............................................................................................. 98 TÀI LIỆU THAM KHẢO .............................................................................. 103 iv
  7. Chương 1: Giới thiệu Microsoft .NET, cơ sở của ngôn ngữ C# Thời lượng: 8 tiết Mục tiêu: - Biết được tổng quan về Microsoft .NET, kiến trúc .NET Framework, - Hiểu được các thành phần cơ bản của C#, - Viết được các chương trình đơn giản bằng C#. 1.1. Tổng quan Microsoft .NET Nền tảng Microsoft .NET (.NET) cung cấp tất cả các công cụ và kỹ thuật cần thiết để người dùng có thể xây dựng một ứng dụng trên môi trường internet. Trong chương trình học, nền tảng .NET được mô tả đơn giản như Hình 1-1. Trung tâm của .NET là .NET framework và môi trường phát triển (IDE - Integrated Development Environment). Framework cung cấp những gì cần thiết, căn bản (hạ tầng cơ sở) theo một quy ước nhất định để giúp cho việc phát triển ứng dụng. IDE là môi trường giúp việc phát triển ứng dụng trở nên dễ dàng và nhanh chóng. Nếu không có IDE, chúng ta cũng có thể phát triển được ứng dụng trên .NET. Tuy nhiên, việc này rất mất thời gian. Chúng ta nên sử dụng một IDE nào đó để phát triển ứng dụng. Visual C++ C# J# … Visual Studio .NET Basic (IDE) Common Language Specification .NET Framework Hình 1-1 Mô tả đơn giản nền tảng .NET 1.1.1. Kiến trúc .NET framework .NET framework gồm 2 thành phần chính: khối thực thi ngôn ngữ nền Trang 1
  8. tảng (CLR - Common Language Runtime) và thư viện lớp (FCL - Framework Class Library). CLR là nền tảng của .NET framework. CLR quản lý sự thực thi mã lệnh và các quản lý liên quan: biên dịch, quản lý bộ nhớ, quản lý thực hiện tiểu trình, bảo mật,… Mã lệnh được thực thi trong CLR là mã lệnh được quản lý (managed code), khác với mã lệnh không được quản lý như COM, các thành phần dựa trên Windows API. FCL là thư viện kiểu dữ liệu (gồm các class, struct, enum,…) dành cho ứng dụng thực thi trong .NET. Tất cả các ngôn ngữ hỗ trợ .NET framework đều sử dụng thư viện lớp dùng chung này. Các thành phần trong CLR: Thành phần Mô tả Class Loader Quản lý siêu dữ liệu, khởi tạo và trình bày các lớp MSIL to Native Compilers Chuyển từ MSIL sang mã nhị phân Code Manager Quản lý việc thực thi Garbage Collector Dọn rác tự động Security Engine Bảo mật Debug Engine Phát hiện lỗi Type Checker Kiểm tra kiểu Exception Manager Quản lý ngoại lệ Thread Support Hỗ trợ các lớp, giao diện cho lập trình đa luồng COM Marshaler Chuyển đổi thành phần COM Base Class Library Support Hỗ trợ thư viện các lớp cơ sở Thư viện các lớp cơ sở trong CFL: Không gian tên Mô tả Collections Danh sách (mảng) động System. Configuration Cấu hình IO Vào/ra dữ liệu Net Kết nối mạng Trang 2
  9. Reflection Phản chiếu (dịch ngược) Resources Tài nguyên (file, chuỗi, hình ảnh) Security Bảo mật Text Chuỗi Threading Đa luồng Runtime Thực thi thời gian thực 1.1.2. Biên dịch và ngôn ngữ trung gian a) Các bước thực hiện của chương trình truyền thống: Các ngôn ngữ trước đây (Pascal, C, C++, Visual Basic) có chương trình dịch và và môi trường thực thi của riêng nó và một chương trình chỉ cần dịch một lần để thực thi. Các bước thực hiện của một chương trình truyền thống như Hình 1-2: - Bước 1: biên dịch mã nguồn thành mã có thể thực thi. - Bước 2: Thực thi thời gian thực mã có thể thực thi. Mã Biên dịch Mã có thể Thực thi Mã nhị nguồn thực thi phân Hình 1-2 Các bước thực thi một chương trình truyền thống b) Các bước thực hiện của chương trình .NET: .NET có chương trình dịch và môi trường thực thi cho mọi máy tính đã cài đặt .NET Framework. Một chương trình trong .NET phải được dịch hai lần trước khi được thực thi. Quá trình biên dịch trong .NET được thực hiện qua 2 giai giai đoạn như Hình 1-3: Giai đoạn 1: biên dịch mã nguồn Bước 1: biên dịch mã nguồn thành mã MSIL (Microsoft Intermediate Language) và siêu dữ liệu. Giai đoạn 2: biên dịch mã MSIL Trang 3
  10. Bước 2: từ siêu dữ liệu, CLR biên dịch mã MSIL thành mã có thể thực thi được và thực thi thời gian thực. MSIL Mã Biên dịch Sử dụng CLR Mã nhị nguồn + phân Thực thi Siêu dữ liệu Biên dịch lần 2 Biên dịch lần 1 Hình 1-3 Quá trình biên dịch một chương trình .NET Các chương trình .NET được biên dịch 2 lần. Kết quả biên dịch của lần thứ nhất chỉ ở dạng mã MSIL. Kết quả biên dịch lần thứ hai sẽ là mã máy. Khi thực thi một chương trình .NET thì thường lần đầu chậm và lần thứ 2 sẽ tương đối nhanh. Khi thực thi lần đầu, chương trình phải được dịch sang mã nhị phân và khi thực hiện phải lưu vào bộ nhớ cache. Điều này làm cho quá trình thực hiện bị chậm. Khi thực hiện lần thứ hai, chương trình không cần phải dịch lại và dữ liệu đã có trong bộ nhớ cache nên việc thực hiện tương đối nhanh. 1.2. Giới thiệu ngôn ngữ C# Có nhiều ngôn ngữ có thể sử dụng để xây dựng ứng dụng trên môi trường .NET. Tuy nhiên, C# là một ngôn ngữ lập trình đặc biệt, được thiết kế để xây dựng ứng dụng trên môi trường này. C# là một ngôn ngữ lập trình đơn giản, hiện đại, an toàn và hướng đối tượng. Nó là ngôn ngữ mạnh nhất trong .NET, thay thế cho C++ và việc sử dụng con trỏ dễ dàng hơn C++. Trong C#, một bài toán là một vấn đề cần được giải quyết (Problem) và tập hợp những gì ta làm bằng C# để giải quyết vấn đề nào đó là một giải pháp (Solution). Để có được một giải pháp thì cần nhiều dự án (Project) cho nên giải pháp trong C# thường có một hoặc nhiều dự án. Dự án trong C# có thể là một chương trình đơn giản hoặc một thư viện hoặc một bộ cài đặt… 1.2.1. Chương trình đầu tiên a) Không sử dụng IDE: - Sử dụng Notepad tạo và lưu lại với tên file là ChaoMung.CS trong ổ đĩa D:\ với nội dung sau: Trang 4
  11. class ChaoMung { static void Main() { System.Console.Write(“Hello, World”); System.Console.ReadKey(); } } - Khởi động Visual Studio Command Prompt: Start > Programs > Microsfoft Visual Studio > Visual Studio Tools > Visual Studio Command Prompt. - Gõ lệnh sau để biên dịch file ChaoMung.CS. D:\> csc /t:exe /out:chaomung.exe ChaoMung.CS - Sau khi biên dịch thành công, thực thi file chaomung.exe ta được kết quả: D:\> chaomung.exe Hello, World Hình 1-4 Giao diện khởi động Microsoft Visual Studio 2008 Trang 5
  12. b) Sử dụng IDE: - Khởi động Microsoft Visual Studio: Lưu ý: nếu là trường hợp khởi động IDE lần tiên sau khi cài thì chương trình yêu cầu lựa chọn môi trường lập trình mặc định. Trong trường hợp này ta nên chọn C#. Khi khởi động, chương trình có giao diện như Hình 1-4: - Tạo mới dự án: Chọn File > New > Project… để tạo một project mới. Giao diện tạo mới một dự án như Hình 1-5: Hình 1-5 Giao diện tạo dự án mới trên Microsoft Visual Studio 2008 - Thêm nội dung sau vào hàm Main: Console.WriteLine("Hello, World"); Console.ReadKey(); - Nhấn phím F6 để biên dịch. - Nhấn phím F5 để thực thi. - Kết quả thực thi: Dòng chữ “Hello, World” được in ra màn hình. 1.2.2. Kiểu dữ liệu, biểu thức, câu lệnh a) Kiểu dữ liệu: C# có 2 loại kiểu dữ liệu: kiểu giá trị và kiểu tham chiếu. Các kiểu dữ liệu của C# được mô tả ở bảng sau: Trang 6
  13. Kiểu dữ liệu Mô tả Số nguyên có dấu: sbyte, short, int, long Số nguyên không dấu: byte, ushort, uint, ulong Ký tự Unicode: char Kiểu giá trị Kiểu đơn giản Số thực: float, double Kiểu decimal: decimal Kiểu logic: bool Kiểu enum enum E {...} Kiểu struct struct S {...} Kiểu cơ sở của các kiểu khác: object Kiểu tham chiếu Kiểu class Unicode: string class C {...} Kiểu interface interface I {...} Kiểu mảng int[] and int[,] Kiểu delegate delegate T D(...) Kiểu dữ liệu số của C# được mô tả ở bảng sau: Danh mục kiểu Số bit Kiểu Phạm vi Có dấu 8 sbyte –128...127 16 short –32,768...32,767 32 int –2,147,483,648 ... 2,147,483,647 64 long –9,223,372,036,854,775,808 ... 9,223,372,036,854,775,807 Không dấu 8 byte 0...255 16 ushort 0...65,535 32 uint 0...4,294,967,295 64 ulong 0...18,446,744,073,709,551,615 Số thực 32 float 1.5 × 10−45 to 3.4 × 1038, 7-chữ số lẻ 64 double 5.0 × 10−324 to 1.7 × 10308, 15-chữ số lẻ Decimal 128 decimal 1.0 × 10−28 to 7.9 × 1028, 28-chữ số lẻ Trang 7
  14. b) Biểu thức: Danh mục Biểu thức Mô tả Dành riêng x.m Truy xuất thành viên x(...) Phương thức hoặc delegate x[...] Truy cập mảng hoặc chỉ mục new T(...) Tạo mới 1 đối tượng hoặc delegate new T[...] Tạo mới mảng typeof(T) Lấy kiểu dữ liệu Phép một ngôi +x Phép cộng -x Phép trừ !x Phép phủ định ~x Phép đảo bit ++x, x++ Phép tăng 1 --x, x-- Phép giảm 1 (T)x Ép (chuyển) kiểu Phép nhân x * y Phép nhân x / y Phép chia x % y Phép chia lấy dư Phép thêm x + y Phép cộng, nối chuỗi, thêm delegate x – y Phép trừ, loại bỏ delegate Dịch bit x > y Dịch phải Phép so sánh x < y Bé hơn x > y Lớn hơn x = y Bé hơn bằng x is T trả về true nếu x là kiểu T, false trong trường hợp ngược lại x as T Trả về x là kiểu T, hoặc null nếu x không có kiểu là T So sánh bằng x == y Bằng Trang 8
  15. x != y Không bằng Phép AND bit x & y AND 2 số nguyên hoặc 2 giá trị logic Phép XOR bit x ^ y XOR 2 số nguyên hoặc 2 giá trị logic Phép OR bit x | y OR 2 số nguyên hoặc 2 giá trị logic Phép AND x && y Điều kiện AND Phép OR x || y Điều kiện OR Phép điều kiện x ? y : z Phép toán 3 ngôi Phép gán x = y Phép gán x op= y Nối phép toán với phép gán. op có thể là: *= /= %= += -= = &= ^= |= c) Câu lệnh: Các câu lệnh trong C#: Câu lệnh Ví dụ Khai báo biến static void Main() { int a; địa phương int b = 2, c = 3; a = 1; Console.WriteLine(a + b + c); // In ra man hinh } Khai báo static void Main() { const float pi = 3.1415927f; hằng địa const int r = 25; phương Console.WriteLine(pi * r * r); } Các câu lệnh, static void Main() { int i; biểu thức i = 123; Console.WriteLine(i); i++; Console.WriteLine(i); } Lệnh if static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("Không đối số"); } else { Console.WriteLine("1 hoặc n đối số"); } } Lệnh switch static void Main(string[] args) { int n = args.Length; switch (n) { case 0: Trang 9
  16. Console.WriteLine("Không đs"); break; case 1: Console.WriteLine("1 đs"); break; default: Console.WriteLine("{0} đs", n); break; } } } Lệnh while static void Main(string[] args) { int i = 0; while (i < args.Length) { Console.WriteLine(args[i]); i++; } } Lệnh do… static void Main() { string s; while do { s = Console.ReadLine(); if (s != null) Console.WriteLine(s); } while (s != null); } Lệnh for static void Main(string[] args) { for (int i = 0; i < args.Length; i++) { Console.WriteLine(args[i]); } } Lệnh foreach static void Main(string[] args) { foreach (string s in args) { Console.WriteLine(s); } } Lệnh break static void Main() { while (true) { string s = Console.ReadLine(); if (s == null) break; Console.WriteLine(s); } } Lệnh continue static void Main(string[] args) { for (int i = 0; i < args.Length; i++) { if (args[i].StartsWith("/")) continue; Console.WriteLine(args[i]); } } Lệnh goto static void Main(string[] args) { int i = 0; goto check; loop: Console.WriteLine(args[i++]); check: if (i < args.Length) goto loop; } Trang 10
  17. Lệnh return static int Add(int a, int b) { return a + b; } static void Main() { Console.WriteLine(Add(1, 2)); return; } Lệnh throw static double Divide(double x, double y) { if (y == 0) throw new and try DivideByZeroException(); return x / y; } static void Main(string[] args) { try { if (args.Length != 2) { throw new Exception("Two numbers required"); } double x = double.Parse(args[0]); double y = double.Parse(args[1]); Console.WriteLine(Divide(x, y)); } catch (Exception e) { Console.WriteLine(e.Message); } } Lệnh checked static void Main() { int i = int.MaxValue; và unchecked checked { Console.WriteLine(i + 1);// Exception } unchecked { Console.WriteLine(i + 1);// Overflow } } Lệnh lock class Account { decimal balance; public void Withdraw(decimal amount) { lock (this) { if (amount > balance) { throw new Exception("Insufficient funds"); } balance -= amount; } } } Lệnh using static void Main() { using (TextWriter w = File.CreateText("test.txt")) { w.WriteLine("Line one"); w.WriteLine("Line two"); w.WriteLine("Line three"); } } Trang 11
  18. 1.2.3. Chú thích Chú thích là hình thức cho phép chèn thêm dòng chỉ dẫn, tài liệu vào trong đoạn mã lệnh. Khi biên dịch, trình biên dịch sẽ bỏ qua các dòng được chú thích. C# cho phép 3 kiểu chú thích sau: Chú thích một dòng: Sử dụng cặp “//” để chú thích một dòng. Chú thích có hiệu lực từ khi gặp cắp dấu này cho đến hết dòng (gặp dấu kết thúc dòng). Chú thích nhiều dòng: Sử dụng hai cặp dấu “/*” và “*/” để chú thích nhiều dòng liên tiếp. Chú thích có hiệu lực từ khi gặp cặp dấu “/*” cho đến khi gặp dấu “*/”. Ví dụ dưới đây minh họa về chú thích một dòng và chú thích nhiều dòng: // Day la chu thich mot dong /* Day la chu thich nhieu dong lien tiep. So dong co the rat nhieu. So dong la 1 cung duoc.*/ Cau nay khong duoc chu thich. Chú ý: Ta có thể dùng nhiều chú thích một dòng để chú thích cho nhiều dòng và dùng chú thích nhiều dòng để chú thích cho một dòng. Tuy nhiên, người ta thường dùng: - Chú thích một dòng cho mã lệnh tạm thời chưa dùng hoặc có thể sai. Điều này làm cho giúp cho việc soạn thảo mã lệnh được nhanh chóng. - Chú thích nhiều dòng cho tài liệu. Chú thích tài liệu XML: Sử dụng bộ dấu “///” để chèn tài liệu XML vào mã lệnh. Chú thích chỉ có hiệu lực như chú thích một dòng. Tuy nhiên, C# có thể hiểu được các chú thích này trên nhiều dòng được chú thích liên tiếp. Khi biên dịch, khi trình biên dịch gặp chú thích này, trình biên dịch sẽ biên dịch vào Assembly. Ví dụ dưới đây minh họa về chú thích tài liệu XML: /// documentation here Với dòng chú thích trên, chúng ta có thể hiểu đó là một thẻ XML. Cụ thể ở đây là thẻ có tên là “summary” và có nội dung là “documentation here”. Chú thích loại này thường được dùng để chú thích cho các lớp, phương thức,… Tuy nhiên, chú thích này phải được đặt ngay trước mã lệnh tương ứng với đối tượng cần chú thích. Trang 12
  19. 1.2.4. Các cấu trúc dữ liệu a) Mảng: Mảng là kiểu được dùng để thể hiện một dãy các đối tượng có cùng kiểu dữ liệu được đặt liên tiếp nhau trong bộ nhớ. Chúng ta dùng cặp dấu “[]” để khai báo và truy xuất các phần tử của mảng. Khi khai báo, chúng ta có thể dùng biến hay hằng để định nghĩa chiều dài của mảng. Tuy nhiên, kích thước của mảng sẽ không thể thay đổi sau lệnh khai báo. Ví dụ dưới đây minh họa về khai báo mảng một chiều: int[] integers = new int[15]; // Khai bao mang integers co kich thuoc la 15 int length = 20; int[] list = new int[length]; list[0] = 2; Chúng ta cũng có thể khai báo một mảng theo cách liệt kê. Ví dụ minh họa về khai báo theo kiểu liệt kê: int[] Mang = {3, 5, 7, 8}; Để đọc chiều dài của mảng hiện tại ta có thể sử dụng cú pháp: .Length. C# còn hỗ trợ các mảng nhiều chiều: kiểu ma trận, kiểu răng cưa. Ví dụ dưới đây minh họa cách khai báo và khởi tạo một mảng nhiều chiều kiểu ma trận hai chiều bằng cách sử dụng thêm dấu “,”: String [ , ] A = { {"Lennon","John"}, {"McCartney","Paul"}, {"Harrison","George"}, {"Starkey","Richard"} }; Các phần tử của A có thể được hình dung như sau: A 0 1 0 Lennon John 1 McCartney Paul 2 Harrison George 3 Starkey Richard Trang 13
  20. Như vậy A như là một ma trận 2 cột x 4 dòng. Phần tử đầu tiên là A[0,0] có giá trị là “Lennon”, phần tử cuối cùng là A[3,1] có giá trị là “Richard”. Tương tự, để khai báo mảng ba chiều ta có thể khai báo như sau: String [ , , ] my3D_Array; Kiểu mảng nhiều chiều thứ hai là mảng kiểu răng cưa, trong đó kích thước của mỗi chiều là có thể khác nhau. Chính xác, đây là kiểu dữ liệu mảng của các mảng. Đoạn mã lệnh dưới đây minh họa cách định nghĩa một mảng kiểu răng cưa: int[][] a = new int[3][]; a[0] = new int[4]; a[1] = new int[3]; a[2] = new int[1]; b) struct: Kiểu dữ liệu struct là kiểu dữ liệu dung lượng hạn nhẹ (light-weight). Nó thường được dùng trong trường hợp trình điều khiển dữ liệu chỉ cần một tập các biến giá trị. Các struct tương tự như các class ở chỗ chúng đều có thể chứa các hàm tạo, các phương thức, thậm chí là có thể xây dựng các giao diện. Tuy nhiên, struct khác class ở các điểm chính: - struct là kiểu giá trị còn class là kiểu tham chiếu. Điều này dẫn đến chúng có cách dùng khác nhau khi là tham số được truyền cho các phương thức. - struct không hỗ trợ kế thừa. Tuy nhiên, struct có thể tiết kiệm bộ nhớ hơn so với class. - struct luôn luôn có hàm tạo mặc định trong khi class có thể ẩn hạm tạo bằng cách cài đặt phạm vị truy cập của của hàm tạo là private. Sau đây là một ví dụ về cách dùng của struct: using System; struct Person { string name; DateTime birthDate; int heightInCm; int weightInKg; public Person(string name, DateTime birthDate, int heightInCm, int weightInKg) Trang 14
nguon tai.lieu . vn