Tải bản đầy đủ (.pdf) (61 trang)

Bài giảng Lập trình C#: Phần 1 - ĐH Phạm Văn Đồng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.18 MB, 61 trang )

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


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Ộ


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


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



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


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



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.

C++

C#

J#



.NET Framework


(IDE)

Common Language Specification

Visual Studio .NET

Visual
Basic

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


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:
Mô tả

System.

Không gian tên
Collections

Danh sách (mảng) động

Configuration

Cấu hình

IO

Vào/ra dữ liệu

Net


Kết nối mạng
Trang 2


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.

nguồn

Biên dịch

Mã có thể
thực thi

Thực thi

Mã nhị
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


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.


nguồn

MSIL

Biên dịch

+
Siêu dữ liệu

Sử dụng CLR
Thực thi

Mã nhị
phân

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


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


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


Kiểu dữ liệu

Mô tả
Số nguyên có dấu: sbyte, short, int, long

Kiểu giá trị

Số nguyên không dấu: byte, ushort, uint,
ulong
Kiểu đơn giản

Ký tự Unicode: char
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 tham chiếu

Kiểu cơ sở của các kiểu khác: object
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
Có dấu

Không dấu

Số thực
Decimal

Kiểu

Phạm vi

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

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

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ẻ

128

decimal 1.0 × 10−28 to 7.9 × 1028, 28-chữ số lẻ

Trang 7


b) Biểu thức:
Danh mục
Dành riêng

Phép một ngôi

Phép nhân

Phép thêm

Dịch bit
Phép so sánh

So sánh bằng

Biểu thức

Mô tả

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

+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


x * y

Phép nhân

x / y

Phép chia

x % y

Phép chia lấy dư

x + y

Phép cộng, nối chuỗi, thêm delegate

x – y

Phép trừ, loại bỏ delegate

x << y

Dịch trái

x >> y

Dịch phải

x < y


Bé hơn

x > y

Lớn hơn

x <= y

Bé hơn bằng

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

x == y

Bằng

Trang 8



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
địa phương

static void Main() {
int a;
int b = 2, c = 3;
a = 1;
Console.WriteLine(a + b + c);
// In ra man hinh
}

Khai báo
hằng địa
phương

static void Main() {
const float pi = 3.1415927f;
const int r = 25;
Console.WriteLine(pi * r * r);
}

Các câu lệnh,
biểu thức

static void Main() {
int i;
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


}

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…
while

static void Main() {
string s;
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


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
and try


static double Divide(double x, double y) {
if (y == 0) throw new
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
và unchecked

static void Main() {
int i = int.MaxValue;
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
w.WriteLine("Line
w.WriteLine("Line
}
}


Trang 11

{
one");
two");
three");


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:
/// <summary> documentation here </summary>

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


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: mảng>.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


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



{
this.name = name;
this.birthDate = birthDate;
this.heightInCm = heightInCm;
this.weightInKg = weightInKg;
}
}
public class StructWikiBookSample
{
public static void Main()
{
Person dana = new Person("Dana Developer", new
DateTime(1974, 7, 18),178, 50);
}
}

Kiểu struct vận hành hiệu quả nhất trong trường hợp dữ liệu có dung
lượng nhỏ hơn hoặc bằng 16 byte. Nếu dữ liệu có dung lượng lớn hơn nhiều thì
ta nên dùng kiểu class.
c) enum:
Kiểu enum là kiểu dữ liệu nguyên với mỗi giá trị được gán với một cái tên
định danh. Sử dụng enum sẽ giúp cho một tập các giá trị trở nên dễ gợi nhớ.
Nếu có 7 số nguyên tượng trưng cho các ngày trong tuần thì ta có thể sử
dụng enum gợi nhớ có khai báo như sau:
enum Weekday {Monday, Tuesday, Wednesday, Thursday,
Friday, Saturday, Sunday};

Hay trường hợp có ba số 0, 1 và 2 tương ứng với ba buổi trong ngày thì ta
có thể gợi nhớ tập này bằng enum sau:
public enum TimeOfDay

{
Morning = 0,
Afternoon = 1,
Evening = 2
}

Việc sử dụng enum sẽ giúp cho đoạn mã lệnh của dễ quản lý, dễ hiểu hơn.
Trang 15


Kiểu enum cũng hỗ trợ chúng ta chuyển đổi giữa giá trị và chuỗi định
danh tương ứng. Sau đây là đoạn mã ví dụ.
//enum -> string
TimeOfDay time = TimeOfDay.Afternoon;
Console.WriteLine(time.ToString()); // chuoi in ra la
“Afternoon”
//string -> enum
TimeOfDay time2 = (TimeOfDay)
Enum.Parse(typeof(TimeOfDay), "Afternoon", true);
Console.WriteLine((int)time2);

1.3. Câu hỏi và bài tập
1) Cài đặt bộ Microsoft Visual Studio 2005 (2008, 2010) lên máy tính cá
nhân.
Lưu ý: chỉ cài đặt ngôn ngữ C#, không cần cài đặt các ngôn ngữ J#, C++,
Visual Basic,…
2) Hãy so sánh hai cách xây dựng ứng dụng: có sử dụng IDE và không sử
dụng IDE.
3) Theo quan điểm cá nhân của anh (chị), lợi ích của việc sử dụng .NET
Framework là gì?

4) Hãy nêu những đặc điểm mà anh (chị) thấy là khác nhau giữa C và C#.
5) Viết chương trình nhập vào chiều dài và chiều rộng của một hình chữ
nhật. In ra màn hình chu vi và diện tích của hình chữ nhật đó.
6) Viết chương trình nhập vào 4 số nguyên. In ra màn hình giá trị lớn
nhất.
7) Viết chương trình giải phương trình bậc nhất: bx +c =0 với các hệ số b,
c bất kỳ.
8) Viết chương trình giải phương trình bậc hai: ax2 + bx +c =0 với các hệ
số a, b, c bất kỳ.
9) Viết chương trình nhập vào một số nguyên dương. Chương trình kết
thúc khi nhận được một số nguyên dương.
10) Viết chương trình nhập vào một số nguyên dương n. Cho biết n có
phải là số nguyên tố không ?
11) Viết chương trình nhập vào một số nguyên dương n. In ra màn hình
các số nguyên tố bé hơn n.

Trang 16


12) Viết chương trình có 4 mục chọn. Mục chọn đầu tiên cho phép
dừng chương trình và 3 mục chọn tiếp theo sẽ thực hiện 3 trong các bài
tập 5-11.
1.4. Bài mẫu
Viết chương trình nhập vào danh sách sinh viên và in ra danh sách thông
tin sinh viên vừa nhập. Thông tin về sinh viên bao gồm: mã sinh viên, họ tên
sinh viên, ngày sinh, giới tính và mã lớp.
Bài làm mẫu:
using System;
namespace Sample
{

// struct thể hiện sinh viên
struct SinhVien
{
string masv, hotensv, malop;
DateTime ngaysinh;
bool gioitinh;
// Gán dữ liệu cho 1 sinh viên
public static SinhVien NhapSV(string masv, string
hotensv, string ngaysinh, string gioitinh, string malop)
{
SinhVien sv = new SinhVien();
sv.masv = masv;
sv.hotensv = hotensv;
sv.ngaysinh = DateTime.Parse(ngaysinh);
sv.gioitinh = gioitinh == "nam" ? true : false;
sv.malop = malop;
return sv;
}
// In 1 sinh viên thành 1 dòng dữ liệu
public static string InSV(SinhVien sv)
{
string chuoi = sv.malop + ", " + sv.hotensv + ", "
+ sv.ngaysinh.ToShortDateString() + ", ";
if (sv.gioitinh == true)
chuoi += "nam";
else
chuoi += "nu";
chuoi += ", " + sv.malop;
return chuoi;
}

}
class Program
Trang 17


{
// Khai báo biến của lớp
static SinhVien[] dssv = new SinhVien[100];
static int n;
// Nhập danh sách sinh viên từ bàn phím
static void NhapDSSV()
{
string soluong, masv, hotensv, ngaysinh, gioitinh,
malop;
int i;
Console.Clear();
Console.WriteLine("Chao mung ban den voi chuong
trinh");
Console.Write("Dau tien, ban hay nhap so luong
sinh vien, n = ");
soluong = Console.ReadLine();
n = int.Parse(soluong);
Console.WriteLine("Tiep theo, ban hay nhap thong
tin cho so sinh vien");
for (i = 0; i < n; i++)
{
Console.WriteLine("Nhap thong tin sinh vien
thu " + (i + 1));
Console.Write("- Ma sinh vien = ");
masv = Console.ReadLine();

Console.Write("- Ho ten sinh vien = ");
hotensv = Console.ReadLine();
Console.Write("- Ngay sinh cua sinh vien
(dd/mm/yyyy) = ");
ngaysinh = Console.ReadLine();
Console.Write("- Gioi tinh sinh vien (nam hoac
nu) = ");
gioitinh = Console.ReadLine();
Console.Write("- Ma lop sinh vien = ");
malop = Console.ReadLine();
dssv[i] = SinhVien.NhapSV(masv, hotensv,
ngaysinh, gioitinh, malop);
}
}
// In danh sách sinh viên ra màn hình Console
static void InDSSV()
{
Console.WriteLine("Danh sach sinh vien vua nhap
la:");
for(int i=0;iConsole.WriteLine((i+1)+".
"+SinhVien.InSV(dssv[i]));
}
Trang 18


}
// Chương trình chính
static void Main(string[] args)
{

NhapDSSV();
InDSSV();
Console.ReadKey();
}
}
}

Trang 19


×