Download as pdf or txt
Download as pdf or txt
You are on page 1of 96

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT VĨNH LONG

KHOA CÔNG NGHỆ THÔNG TIN

Chương I
TỔNG QUAN VỀ C#
Trình bày: ThS. LÊ THỊ HOÀNG YẾN
Tháng 8/2016
2

NỘI DUNG

1.1 Tổng quan về .NET framework

1.2 Giới thiệu về C#

1.3 Thao tác với mảng (Array)

1.4 Kiểu dữ liệu liệt kê (Enum)

1.5 Namespace
Lập trình Windows - Lê Thị Hoàng Yến
3

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.1 Tổng quan kiến trúc .NET framework
- .NET framework được thiết kế như môi trường tích hợp để đơn giản hóa việc
phát triển và thực thi:
+ Các ứng dụng trên Internet (ASP.NET, Web services)
+ Các ứng dụng trên desktop dưới dạng Windows Forms
+ Hoặc thậm chí là trên cả các thiết bị di động (với Compact Framework)

Lập trình Windows - Lê Thị Hoàng Yến


4

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.1 Tổng quan kiến trúc .NET framework
- Mục tiêu chính .NET framework hướng đến:
+ Cung cấp một môi trường hướng đối tượng nhất quán cho nhiều loại
ứng dụng
+ Cung cấp một môi trường giảm tối thiểu sự xung đột phiên bản (“DLL
Hell” – Địa ngục DLL) từng làm điêu đứng các lập trình viên Windows (COM),
và đơn giản hóa quá trình triển khai/cài đặt
+ Cung cấp một môi trường linh động, dựa trên các chuẩn đã được chứng
nhận để có thể chứa trên bất cứ hệ điều hành nào
+ Cung cấp một môi trường quản lý được, trong đó mã được dễ dàng xác
thực để thực thi an toàn.
Lập trình Windows - Lê Thị Hoàng Yến
5

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.1 Tổng quan kiến trúc
.NET framework
- Kiến trúc của .NET Framework
được thiết kế thành 2 phần:
+ CLR (Common Language
Runtime – Khối thức thi ngôn
ngữ chung)
+ FCL (Framework Class
Library – Thư viện lớp khung)

Lập trình Windows - Lê Thị Hoàng Yến


6

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.1 Tổng quan kiến trúc .NET framework
CLR (Comon Language Runtime)
- Phần cài đặt CLI của Microsoft
- Làm nhiệm vụ quản lý sự thực thi mã lệnh và tất cả các tác vụ liên quan đến
nó: biên dịch, quản lý bộ nhớ, bảo mật, quản lý tuyến đoạn, và thực thi an
toàn kiểu.
- Mã lệnh thực thi trong CLR được gọi là mã được quản lý (managed code),
phân biệt với mã không được quản lý (unmanaged code), là mã lệnh không
cài đặt những yêu cầu để thực thi trong CLR – chẳng hạn như COM hoặc các
thành phần dựa trên Windows API

Lập trình Windows - Lê Thị Hoàng Yến


7

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.1 Tổng quan kiến trúc .NET framework
FCL (FrameWork Class Library)
- Là thư viện kiểu dữ liệu có thể tái sử dụng (gồm các class, structure, …)
dành cho các ứ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

Lập trình Windows - Lê Thị Hoàng Yến


8

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.2 Môi trường thực thi ngôn ngữ chung CLR
- CLR (Common Languge Runtime – Môi trường thực thi ngôn ngữ chung)
quản lý toàn bộ vòng đời của một ứng dụng: nó nạp các lớp có liên quan,
quản lý sự thực thi của các lớp, và đảm bảo quản lý bộ nhớ một cách tự động.
Ngoài ra, CLR còn hỗ trợ tích hợp giữa các ngôn ngữ để cho phép mã lệnh
được sinh ra bởi các ngôn ngữ khác nhau có thể tương tác với nhau một cách
liền mạch.

Lập trình Windows - Lê Thị Hoàng Yến


9

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.2 Môi trường thực thi ngôn ngữ chung CLR
Biên dịch mã lệnh .NET
- Trình biên dịch tương thích với CLR sẽ sinh mã thực thi cho môi trường thực
thi chứ không phải là mã thực thi cho CPU cụ thể
- Mã thực thi này được biết đến qua tên gọi CIL (Common Intermediate
Language – Ngôn ngữ trung gian chung), hay MSIL (Microsoft Intermediate
Language – Ngôn ngữ trung gian của Microsoft)
 Ngôn ngữ kiểu assembler được đóng gói trong các file EXE hoặc DLL
 Cần trình biên dịch JIT (Just-inTime) của môi trường thực thi để
chuyển đối IL chứa trong nó sang dạng mã lệnh cụ thể của máy khi ứng
dụng thực sự thực thi
Lập trình Windows - Lê Thị Hoàng Yến
10

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.2 Môi trường thực thi ngôn ngữ chung CLR
Biên dịch mã lệnh .NET
- Quá trình biên dịch, thực thi một chương trình trong .NET framework có thể
tóm tắt như sau:
+ Chương trình nguồn trước hết sẽ được biên dịch và đóng gói thành một
khối gọi là assembly. Khối này sẽ chứa các mã lệnh ngôn ngữ trung gian và
các metadata mô tả thông tin cần thiết cho sự hoạt động của khối
+ Mỗi khi có yêu cầu thực thi assembly nói trên, CLR sẽ chuyển đối mã
lệnh ngôn ngữ trung gian trong assembly thành mã lệnh tương thích với CPU
cụ thể trước khi có thể thực thi

Lập trình Windows - Lê Thị Hoàng Yến


11

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.2 Môi trường thực thi
ngôn ngữ chung CLR
Biên dịch mã lệnh .NET

Lập trình Windows - Lê Thị Hoàng Yến


12

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.2 Môi trường thực thi
ngôn ngữ chung CLR
Hệ thống kiểu dữ liệu chung CTS
(Common Type System)
- CTS cung cấp một tập cơ sở các
kiểu dữ liệu cho mỗi ngôn ngữ hoạt
động trên .NET platform
- Đặc tả cách khai báo và tạo các
kiểu dữ liệu tùy biến, cách quản lý
vòng đời của một thể hiện của những
kiểu dữ liệu này
Lập trình Windows - Lê Thị Hoàng Yến
13

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.2 Môi trường thực thi ngôn ngữ chung CLR
Assemblies
- Tất cả các mã được quản lý thực thi trong .NET đều phải được chứa trong
một assembly
- Một assembly được xem như là một file EXE hoặc DLL. Một asembly có thể
chứa một tập hợp gồm một hay nhiều file chứa phần mã lệnh hoặc tài nguyên
(như ảnh hoặc dữ liệu XML)
- Một assembly được tạo ra khi trình biên dịch tương thích với .NET chuyển
một file chứa mã nguồn thành một file DLL hoặc EXE

Lập trình Windows - Lê Thị Hoàng Yến


14

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.2 Môi trường thực thi ngôn ngữ chung CLR
Assemblies
- Một assembly chứa một manifest, metadata, và ngôn ngữ trung gian sinh bởi
trình biên dịch cụ thể

Lập trình Windows - Lê Thị Hoàng Yến


15

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.2 Môi trường thực thi ngôn ngữ chung CLR
Assemblies
- Assembly không chỉ là cách logic để đóng gói các mã thực thi. Nó quy định
mô hình chủ yếu của .NET để triển khai mã lệnh, quản lý phiên bản, và bảo
mật
- Một assembly có thể chứa nhiều file
 tạo ra các ứng dụng đa ngôn ngữ dùng chung các module logic, giao diện
hoặc các tài nguyên khác có thể được triển khai thành các file độc lập
 Không có giới hạn về số lượng file trong một assembly
- Các assembly có thể được triển khai theo hai dạng: private assembly và
global assembly
Lập trình Windows - Lê Thị Hoàng Yến
16

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.2 Môi trường thực thi ngôn ngữ chung CLR
Assemblies

Lập trình Windows - Lê Thị Hoàng Yến


17

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.2 Môi trường thực thi ngôn ngữ chung CLR
Tiền biên dịch một Assembly
- Sau khi một assembly được nạp vào CLR, IL phải được biên dịch sang
thành mã máy trước khi thực sự được thực thi
- .NET Framework có cung cấp một công cụ gọi là Ngen (Native Image
Generator), dùng để biên dịch một assembly thành một “native image” được
lưu trong native image cache – một vùng dành riêng của GAC. Mỗi khi CLR
nạp một assembly, nó sẽ kiểm tra trong cache xem đã có native image tương
ứng chưa; nếu có nó sẽ nạp mã đã biên dịch đó chứ không cần biên dịch
thêm lần nữa
 Nếu được khai thác hợp lý thì có thể tận dụng để cải thiện hiệu năng
Lập trình Windows - Lê Thị Hoàng Yến
18

1.1 TỔNG QUAN VỀ .NET FRAMEWORK


1.1.2 Môi trường thực thi ngôn ngữ chung CLR
Kiểm chứng mã lệnh (Code Verification)
- Như là một phần của quá trình biên dịch JIT, CLR thực hiện hai loại kiểm
chứng: kiểm chứng IL và hợp lệ hóa metadata để bảo đảm mã lệnh được an
toàn kiểu
- Thuận lợi của mã lệnh được kiểm chứng đó là CLR có thể chắc chắn mã
lệnh sẽ không ảnh hưởng đến ứng dụng khác theo kiểu truy xuất đến vùng
nhớ ngoài vùng cho phép của nó. Do đó CLR tự do thực thi nhiều ứng dụng
trong cùng một tiến trình hay không gian địa chỉ

Lập trình Windows - Lê Thị Hoàng Yến


19

1.2 GIỚI THIỆU VỀ C#


- Ngôn ngữ lập trình C# khá đơn giản với khoảng hơn 80 từ khóa và hơn
mười kiểu dữ liệu được dựng sẵn
- Có ý nghĩa to lớn khi nó thực thi những khái niệm lập trình hiện đại
- Ngôn ngữ C# đơn giản vì nó dựa trên nền tảng C và C++
- Có các đặc trưng sau đây:
+ C# là ngôn ngữ đơn giản
+ C# là ngôn ngữ hiện đại
+ C# là ngôn ngữ hướng đối tượng
+ C# là ngôn ngữ mạnh mẽ và mềm dẻo
+ C# là ngôn ngữ hướng module
+ C# sẽ trở nên phổ biến
Lập trình Windows - Lê Thị Hoàng Yến
20

1.2 GIỚI THIỆU VỀ C#


C# là ngôn ngữ đơn giản
- C# loại bỏ được một vài sự phức tạp và rối rắm của các ngôn ngữ lập
trình khác như Java hay C++
- C# khá giống C / C++ về diện mạo, cú pháp, biểu thức, toán tử.
- Các chức năng của C# được lấy trực tiếp từ ngôn ngữ C / C++ nhưng
được cải tiến để làm cho ngôn ngữ đơn giản hơn

Lập trình Windows - Lê Thị Hoàng Yến


21

1.2 GIỚI THIỆU VỀ C#


C# là ngôn ngữ hiện đại
C# có được những đặc tính của ngôn ngữ hiện đại như:
- Xử lý ngoại lệ
- Thu gom bộ nhớ tự động
- Có những kiểu dữ liệu mở rộng
- Bảo mật mã nguồn

Lập trình Windows - Lê Thị Hoàng Yến


22

1.2 GIỚI THIỆU VỀ C#


C# là ngôn ngữ hướng đối tượng
C# hỗ trợ tất cả những đặc tính của ngôn ngữ hướng đối tượng là:
+ Sự đóng gói (encapsulation)
+ Sự kế thừa (inheritance)
+ Đa hình (polymorphism)

Lập trình Windows - Lê Thị Hoàng Yến


23

1.2 GIỚI THIỆU VỀ C#


C# là ngôn ngữ mạnh mẽ và mềm dẻo
- Với ngôn ngữ C#, chúng ta chỉ bị giới hạn ở chính bản thân của chúng ta.
Ngôn ngữ này không đặt ra những ràng buộc lên những việc có thể làm.
- C# được sử dụng cho nhiều dự án khác nhau như: tạo ra ứng dụng xử lý
văn bản, ứng dụng đồ họa, xử lý bảng tính; thậm chí tạo ra những trình biên
dịch cho các ngôn ngữ khác.
- C# là ngôn ngữ sử dụng giới hạn những từ khóa. Phần lớn các từ khóa dùng
để mô tả thông tin, nhưng không vì thế mà C# kém phần mạnh mẽ. Chúng ta
có thể tìm thấy rằng ngôn ngữ này có thể được sử dụng để làm bất cứ nhiệm
vụ nào.

Lập trình Windows - Lê Thị Hoàng Yến


24

1.2 GIỚI THIỆU VỀ C#


C# là ngôn ngữ hướng module
- Mã nguồn của C# được viết trong Class (lớp). Những Class này chứa
các Method (phương thức) thành viên của nó
- Class (lớp) và các Method (phương thức) thành viên của nó có thể được
sử dụng lại trong những ứng dụng hay chương trình khác

Lập trình Windows - Lê Thị Hoàng Yến


25

1.2 GIỚI THIỆU VỀ C#


C# sẽ trở nên phổ biến
- Một trong những lý do chính để C# trở nên phổ biến là Microsoft và sự cam
kết của .NET
+ Microsoft muốn ngôn ngữ C# trở nên phổ biến
 Được sử dụng bởi Microsoft. Nhiều sản phẩm của công ty này đã
chuyển đổi và viết lại bằng C#. Bằng cách sử dụng ngôn ngữ này Microsoft đã
xác nhận khả năng của C# cần thiết cho những người lập trình
+ Micorosoft .NET là một lý do khác để đem đến sự thành công của C#.
.NET là một sự thay đổi trong cách tạo và thực thi những ứng dụng
- C# cũng sẽ trở nên phổ biến do những đặc tính của ngôn ngữ này được đề
cập trong mục trước như: đơn giản, hướng đối tượng, mạnh mẽ...
Lập trình Windows - Lê Thị Hoàng Yến
26

1.2 GIỚI THIỆU VỀ C#


C# và những ngôn ngữ lập trình khác
- Microsoft nói rằng C# mang đến sức mạnh của ngôn ngữ C++ với sự dễ
dàng của ngôn ngữ Visual Basic
+ C# loại bỏ một vài các đặc tính của C++, nhưng bù lại nó tránh được
những lỗi thường gặp trong ngôn ngữ C++
+ C# cũng từ bỏ ý tưởng đa kế thừa như trong C++
+ C# đưa thêm thuộc tính vào trong một lớp giống như trong Visual Basic.
Và những thành viên của lớp được gọi duy nhất bằng toán tử “.” khác với C++
có nhiều cách gọi trong các tình huống khác nhau
- Giống như C++ và C#, Java được phát triển dựa trên C. Chúng ta sẽ tìm
được nhiều cái mà học từ C# có thể được áp dụng vào Java
Lập trình Windows - Lê Thị Hoàng Yến
27

1.2 GIỚI THIỆU VỀ C#


1.2.1 Định danh trong C#
- Chỉ sử dụng các kỹ tự trong bảng chữ cái (a..z A..Z), các ký tự số (0..9) và
các dấu gạch dưới, không sử dụng ký tự đặc biệt
- Ký tự đầu tiên của định danh: ký tự hoặc dấu gạch dưới
- Không được phép trùng với các từ khóa trong ngôn ngữ lập trình C#
- C# phân biệt chữ hoa và chữ thường
- Ví dụ

Lập trình Windows - Lê Thị Hoàng Yến


28

1.2 GIỚI THIỆU VỀ C#


1.2.1 Định danh trong C#

Lập trình Windows - Lê Thị Hoàng Yến


29

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
- C# là ngôn ngữ lập trình mạnh về kiểu dữ liệu
- Kiểu dữ liệu của một đối tượng là một tín hiệu để trình biên dịch nhận biết
kích thước của một đối tượng (kiểu int có kích thước là 4 byte) và khả năng
của nó (như một đối tượng button có thể vẽ, phản ứng khi nhấn,...)
- Tương tự như C++ hay Java, C# chia thành hai tập hợp kiểu dữ liệu chính:
+ Kiểu xây dựng sẵn (built- in) do ngôn ngữ cung cấp cho người lập trình
+ Kiểu được người dùng định nghĩa (user-defined) do người lập trình tạo

Lập trình Windows - Lê Thị Hoàng Yến


30

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
- C# phân kiểu dữ liệu dựng sẵn (built-in) thành 2 loại:
+ Kiểu dữ liệu giá trị: biến kiểu dữ liệu giá trị lưu trữ trực tiếp một giá trị
+ Kiểu dữ liệu tham chiếu: biến kiểu tham chiếu lưu trữ tham chiếu đến
một giá trị dữ liệu
- Về mặt vật lý, biến của 2 kiểu dữ liệu này được lưu vào 2 vùng nhớ khác
nhau của chương trình:
+ Biến kiểu giá trị: vùng nhớ stack
+ Biến kiểu tham chiếu: vùng nhớ heap
- Cần lưu ý hiệu ứng của các phép gán đối với kiểu dữ liệu tham chiếu

Lập trình Windows - Lê Thị Hoàng Yến


31

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#

Lập trình Windows - Lê Thị Hoàng Yến


32

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Kiểu dữ liệu giá trị được định nghĩa sẵn
- Ngôn ngữ C# đưa ra các kiểu dữ liệu xây dựng sẵn rất hữu dụng, phù hợp
với một ngôn ngữ lập trình hiện đại
- Mỗi kiểu dữ liệu được ánh xạ đến một kiểu dữ liệu được hỗ trợ bởi hệ thống
xác nhận ngôn ngữ chung (Common Language Specification: CLS) trong
MS.NET
- Việc ánh xạ các kiểu dữ liệu nguyên thuỷ của C# đến các kiểu dữ liệu của
.NET (kiểu trong CTS)  đảm bảo các đối tượng được tạo ra trong C# có thể
được sử dụng đồng thời với các đối tượng được tạo bởi bất cứ ngôn ngữ
khác được biên dịch bởi .NET, như VB.NET
Lập trình Windows - Lê Thị Hoàng Yến
33

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Kiểu dữ liệu giá trị được định nghĩa sẵn
- C# hỗ trợ sẵn 8 kiểu số nguyên sau
Tên Kiểu trong CTS Mô tả Miền giá trị
sbyte System.Sbyte Số nguyên có dấu 8-bit - 27: 27 - 1
short System.Int16 Số nguyên có dấu 16-bit - 215: 215 - 1
int System.Int32 Số nguyên có dấu 32-bit - 231: 231 – 1
long System.Int64 Số nguyên có dấu 64-bit - 263: 263 - 1
byte System.Byte Số nguyên không dấu 8-bit 0 : 28 - 1
ushort System.UInt16 Số nguyên không dấu 16-bit 0 : 216 – 1
uint System.UInt32 Số nguyên không dấu 32-bit 0 : 232 – 1
ulong System.UInt64 Số nguyên không dấu 64-bit 0 : 264 – 1
Lập trình Windows - Lê Thị Hoàng Yến
34

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Kiểu dữ liệu giá trị được định nghĩa sẵn
- Các kiểu số dấu chấm động (floating-point types)
Tên Kiểu trong CTS Độ chính xác Miền giá trị
float System.Single 7 chữ số - 3.4  1038 : 3.4  1038
double System.Double 15-16 chữ số  5.0  10-324 :  1.7  10308

- Kiểu dữ liệu decimal, so với các kiểu số dấu chấm động, decimal có độ
chính xác cao hơn và miền giá trị nhỏ hơn
Tên Kiểu trong CTS Độ chính xác Miền giá trị
decimal System.Decimal 28 - 29 chữ số - 7.9  1028 : 7.9  1028

Lập trình Windows - Lê Thị Hoàng Yến


35

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Kiểu dữ liệu giá trị được định nghĩa sẵn
- Kiểu boolean
+ Tương ứng với System.Boolean trong CTS, C# có kiểu dữ liệu bool
 nhận một trong hai giá trị true hoặc false.
+ Một điều lưu ý, kiểu dữ liệu bool không được nhận các giá trị nguyên
như một số ngôn ngữ (C, C++)

Lập trình Windows - Lê Thị Hoàng Yến


36

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Kiểu dữ liệu giá trị được định nghĩa sẵn
- Kiểu ký tự
+ Để lưu trữ giá trị của một ký tự đơn, C# hỗ trợ dữ liệu kiểu ký tự (char)
Tên Kiểu trong CTS Kích thước
char System.Char Ký tự Unicode 16-bit

+ Các hằng kiểu ký tự được gán bằng cách:


 Đóng trong cặp dấu nháy đơn: 'A'
 Biểu thị hằng ký tự dưới dạng số thập lục phân: ‘\u0041’
 hoặc ép kiểu: (char)65

Lập trình Windows - Lê Thị Hoàng Yến


37

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Kiểu dữ liệu giá trị được định nghĩa sẵn Ký tự escape Ký tự tương ứng
- Kiểu ký tự \’ Dấu nháy đơn
+ Ngoài ra có thể sử dụng một số ký tự \” Dấu nháy đôi
\\ Ký tự \
escape như bảng bên:
\0 Ký tự Null
\a Ký tự Alert
\b Ký tự Backspace
\f Ký tự Form feed
\n Ký tự xuống dòng
\r Ký tự về đầu dòng
\t Ký tự Tab
\v Ký tự Tab dọc (Vertical Tab)
Lập trình Windows - Lê Thị Hoàng Yến
38

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Kiểu dữ liệu tham chiếu được định nghĩa sẵn
- C# hỗ trợ sẵn 2 kiểu dữ liệu tham chiếu
Tên Kiểu trong CTS Mô tả
Kiểu dữ liệu gốc, mọi kiểu dữ liệu khác trong CTS đều
object System.Object
kế thừa từ đây
string System.String Chuối ký tự Unicode

Lập trình Windows - Lê Thị Hoàng Yến


39

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Kiểu dữ liệu tham chiếu được định nghĩa sẵn
- Kiểu dữ liệu object
+ Kiểu dữ liệu cơ bản nhất, tất cả các kiểu dữ liệu khác đều phải kế thừa
+ Các thuận lợi các được từ kiểu dữ liệu object:
 Sử dụng tham chiếu đối tượng để gắn kết với một đối tượng của bất
kỳ kiểu dữ liệu con nào hoặc trong những trường hợp mà mã lệnh phải
truy xuất đến những đối tượng chưa rõ kiểu dữ liệu
 Có cài đặt một số phương thức cơ bản, dùng chung: Equals(),
GetHashCode(), GetType() và ToString(). Các lớp do người dùng sử
dụng tự định nghĩa có thể cài đặt lại các phương thức này
Lập trình Windows - Lê Thị Hoàng Yến
40

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Kiểu dữ liệu tham chiếu được định nghĩa sẵn
- Kiểu dữ liệu string
+ Được cung cấp sẵn với nhiều phép toán và cách thức hoạt động
+ Một trong những kiểu dữ liệu được sử dụng nhiều nhất
+ Đối tượng string được cấp phát vùng nhớ trong heap, và khi gán một
biến string cho một biến khác  có 2 tham chiếu đến cùng một choỗi trong bộ
nhớ.
+ Khi thay mới nội dung của một trong các chuỗi này, chuỗi thay đổi sẽ
được tạo mới hoàn toàn, không ảnh hưởng đến các chuỗi khác

Lập trình Windows - Lê Thị Hoàng Yến


41

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được
định nghĩa sẵn của C#
Kiểu dữ liệu tham chiếu được
định nghĩa sẵn
- Kiểu dữ liệu string

Lập trình Windows - Lê Thị Hoàng Yến


42

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Chuyển đổi giữa các kiểu dữ liệu
- Những đối tượng của một kiểu dữ liệu này có thể được chuyển sang những
đối tượng của một kiểu dữ liệu khác thông qua cơ chế chuyển đổi tường minh
hay ngầm định
+ Chuyển đổi nhầm định được thực hiện một cách tự động, trình biên dịch
sẽ thực hiện công việc này.
+ Chuyển đổi tường minh diễn ra khi chúng ta gán ép một giá trị cho kiểu
dữ liệu khác

Lập trình Windows - Lê Thị Hoàng Yến


43

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Chuyển đổi giữa các kiểu dữ liệu
- Xét ví dụ, chúng ta có thể gán ngầm định một số kiểu short (2 byte) vào một
số kiểu int (4 byte) một cách ngầm định
short x = 10;
int y = x; // chuyển đổi ngầm định
 Có bị mất dữ liệu không??? Nếu thực hiện chuyển đổi ngược lại từ
int sang short thì sao?

Lập trình Windows - Lê Thị Hoàng Yến


44

1.2 GIỚI THIỆU VỀ C#


1.2.2 Các kiểu dữ liệu được định nghĩa sẵn của C#
Chuyển đổi giữa các kiểu dữ liệu
 Trình biên dịch sẽ không thực hiện chuyển đổi ngầm định từ kiểu int sang
short
short x;
int y = 100;
x = y; // Không biên dịch, lỗi!!!
 Để không bị lỗi???

Lập trình Windows - Lê Thị Hoàng Yến


45

1.2 GIỚI THIỆU VỀ C#


1.2.3 Biến
a/- Biến trong C#
- Biến là đơn vị được các ngôn ngữ lập trình tổ chức để lưu trữ và xử lý dữ
liệu.
- Để tạo một biến chúng ta phải khai báo kiểu của biến và gán cho biến một
tên duy nhất theo cú pháp sau:
<tên kiểu> <tên biến>;
- Biến có thể được khởi tạo giá trị ngay khi được khai báo, hay nó cũng có thể
được gán một giá trị mới vào bất cứ lúc nào trong chương trình

Lập trình Windows - Lê Thị Hoàng Yến


46

1.2 GIỚI THIỆU VỀ C#


1.2.3 Biến
a/- Biến trong C#
- Xét ví dụ minh họa về biến sau:

Lập trình Windows - Lê Thị Hoàng Yến


47

1.2 GIỚI THIỆU VỀ C#


1.2.3 Biến
a/- Biến trong C#
- Gán giá trị xác định
cho biến
C# đòi hỏi các biến
phải được khởi tạo
trước khi được sử
dụng

Lập trình Windows - Lê Thị Hoàng Yến


48

1.2 GIỚI THIỆU VỀ C#


1.2.3 Biến
b/- Phạm vi hoạt động của biến
- Phạm vi hoạt động của biến là vùng mã lệnh mà trong đó biến có thể được
truy xuất  Trong cùng phạm vi hoạt động, không được có hai biến trùng tên
- Phạm vi hoạt động của biến được xác định theo các quy tắc sau:
+ Một trường dữ liệu (field), còn được gọi là một biến thành phần của một
lớp đối tượng  tầm hoạt động là trong phạm vi lớp chứa nó
+ Một biến cục bộ sẽ có tầm hoạt động trong khối mà nó được khai báo
(trong cập dấu ngoặc móc { })
+ Một biến cục bộ được khai báo trong các lệnh lặp for, while… thì sẽ có
phạm vi hoạt động trong thân vòng lặp
Lập trình Windows - Lê Thị Hoàng Yến
49

1.2 GIỚI THIỆU VỀ C#


1.2.3 Biến
b/- Phạm vi hoạt động của biến

Lập trình Windows - Lê Thị Hoàng Yến


50

1.2 GIỚI THIỆU VỀ C#


1.2.4 Hằng
- Hằng cũng là một biến, tuy nhiên giá trị của nó không được phép thay đổi
trong suốt thời gian nó tồn tại (thời gian chương trình thực thi)
- Cách khai báo tương tự như biến, chỉ khác là có thêm từ khóa const ở đầu
và giá trị cần gán cho hằng là bắt buộc:
const <tên kiểu> <tên hằng> = <giá trị>;
- Ví dụ: const int a = 100;
const char c = ‘A’;
const float f = 7.5;

Lập trình Windows - Lê Thị Hoàng Yến


51

1.2 GIỚI THIỆU VỀ C#


1.2.4 Hằng
- Hằng có các thuộc tính sau:
+ Phải được khởi tạo ngay khi nó được khai báo
 không được thay đổi giá trị (sử dụng lệnh gán để gán lại giá trị)
+ Giá trị của hằng được tính toán tại thời điểm biên dịch
 không thể khởi tạo giá trị của hằng bằng một biến
+ Hằng bao giờ cũng là static, tuy nhiên ta không đưa từ khóa static vào
khai báo hằng

Lập trình Windows - Lê Thị Hoàng Yến


52

1.2 GIỚI THIỆU VỀ C#


1.2.4 Hằng
- Có ba thuận lợi khi sử dụng hằng trong chương trình:
+ Chương trình dễ đọc hơn, thay thế các con số vô cảm bởi những tên
mang đầy ý nghĩa hơn
+ Dễ sửa chương trình, việc thay đổi giá trị chỉ cần thực hiện một lần ngay
tại vị trí khai báo hằng
+ Dễ dàng tránh lỗi hơn, vì nếu gán một giá trị nào khác cho hằng vốn đã
được khai báo ở đâu đó trong chương trình thì trình biên dịch sẽ tự động
thông báo lỗi vì hằng này đã được khai báo

Lập trình Windows - Lê Thị Hoàng Yến


53

1.2 GIỚI THIỆU VỀ C#


1.2.5 Lệnh và các toán tử
a/- Lệnh và khối lệnh
- Lệnh là một tập hợp bao gồm các biến, hằng số, toán tử, các từ khóa  mô
tả sự logic trong điều khiển  máy tính sẽ thực thi “những logic”  kết quả
- Trong C#, ký hiệu dùng để mô tả cho sự kết thúc một lệnh chính là dấu “;”
- Những câu lệnh này sẽ được xử lý tuần tự. Trong C# một tập hợp các câu
lệnh (nhiều hơn một lệnh) người ta gọi là một khối lệnh
- Khối lệnh thực thi một mục đích logic nào đó. Một khối lệnh bắt đầu bằng
dấu “{” và kết thúc bằng dấu “}”
- Đặc trưng của khối lệnh đó là phạm vi thực hiện trong khối lệnh, một biến
được khai báo trong khối lệnh được gọi là biến cục bộ
Lập trình Windows - Lê Thị Hoàng Yến
54

1.2 GIỚI THIỆU VỀ C#


1.2.5 Lệnh và các toán tử
b/- Các toán tử

Lập trình Windows - Lê Thị Hoàng Yến


55

1.2 GIỚI THIỆU VỀ C#


1.2.5 Lệnh và các toán tử
b/- Các toán tử

Lập trình Windows - Lê Thị Hoàng Yến


56

1.2 GIỚI THIỆU VỀ C#


1.2.5 Lệnh và các toán tử
b/- Các toán tử
- Các toán tử viết tắt:

Lập trình Windows - Lê Thị Hoàng Yến


57

1.2 GIỚI THIỆU VỀ C#


1.2.5 Lệnh và các toán tử
b/- Các toán tử
- Thứ tự ưu tiên của các toán tử

Lập trình Windows - Lê Thị Hoàng Yến


58

1.2 GIỚI THIỆU VỀ C#


1.2.5 Lệnh và các toán tử
- Toán tử tam nguyên: cũng giống như C, C# cũng có hỗ trợ toán tử tam
nguyên (ternary operator).
<điều kiện> ? <Giá trị đúng>: <Giá trị sai>;
Ví dụ: int a = 10, b = 20, c;
c = (a > b) ? a : b;
- Toán tử is: Toán tử is cho phép kiểm tra một object có “tương thích” với một
kiểu dữ liệu nào đó hay không
- Toán tử sizeof: cho phép xác định kích thước (byte) của một kiểu dữ liệu giá
trị trên vùng nhớ stack bao gồm enum types, pointer types, các struct do
người dùng định nghĩa không chứa các trường có kiểu dữ liệu tham chiếu
Lập trình Windows - Lê Thị Hoàng Yến
59

1.2 GIỚI THIỆU VỀ C#


1.2.6 Nhập xuất cơ bản trong ứng dụng C# Console
-Với các lập trình viên mới học lập trình C# , luôn phải sử dụng cửa sổ dòng
lệnh để thực hiện xuất nhập dữ liệu của chương trình. Để thực hiện điều này
thì lập trình viên bắt buộc phải nắm được các phương thức nhập xuất cơ bản
của C#.
- Trong ứng dụng Console có 3 luồng cơ bản dùng để xử lý vào/ra:
+ Nhập dữ liệu chuẩn (Standard in) : Dùng để nhận các tham số đầu vào
cho chương trình xử lý.
+ Xuất dữ liệu chuẩn (Standard out): Dùng hiển thị kết quả đầu ra.
+ Thông báo lỗi (Standard err): Dùng hiển thị các thông báo lỗi.

Lập trình Windows - Lê Thị Hoàng Yến


60

1.2 GIỚI THIỆU VỀ C#


1.2.6 Nhập xuất cơ bản trong ứng dụng C# Console
a/- Phương thức xuất dữ liệu
- Trong C#, lớp Console trong namespace System dùng để thực hiện các hoạt
động trên console.Để hiển thị ra màn hình ta sử dụng 2 phương thức đầu ra :
+ Console.Write() : Hiển thị kết quả ra màn hình
+ Console.WriteLine(): Hiển thị kết quả ra màn hình và xuống dòng
- Chú ý khi sử dụng hàm Console.WriteLine() nếu ta muốn hiển thị thông tin
của nhiều biến đầu ra thì ta sử dụng Placeholder để chứa các thông tin về vị
trí xuất dữ liệu cũng như là format xuất dữ liệu

Lập trình Windows - Lê Thị Hoàng Yến


61

1.2 GIỚI THIỆU VỀ C#


1.2.6 Nhập xuất cơ bản trong ứng dụng C# Console
a/- Phương thức xuất dữ liệu
- Chú ý : Khi sử dụng phương thức xuất dữ liệu cần phải chú ý các định dạng
dữ liệu khi xuất đó chính là các định dạng kiểu số thực, kiểu Datetime
- Ví dụ: Mô tả sử dụng phương thức Console.WriteLine() có sử dụng format
kiểu số và format kiểu Datetime

Lập trình Windows - Lê Thị Hoàng Yến


62

1.2 GIỚI THIỆU VỀ C#


1.2.6 Nhập xuất
cơ bản trong ứng
dụng C# Console
a/- Phương thức
xuất dữ liệu

Lập trình Windows - Lê Thị Hoàng Yến


63

1.2 GIỚI THIỆU VỀ C#


1.2.6 Nhập xuất cơ bản trong ứng dụng C# Console
a/- Phương thức đọc dữ liệu
- Trong C#, để đọc dữ liệu từ bàn phím ta sử dụng nhập chuẩn Standard in
và thông qua 2 phương thức của lớp Console.
+ Console.Read() : Đọc một ký tự từ bàn phím.
+ Console.ReadLine() : Đọc một chuỗi ký tự từ bàn phím.
- Ví dụ : Hình sau mô tả sử dụng Phương thức Console.ReadLine() để đọc giá
trị nhập vào của Number1 và Number2
- Chú ý: Khi sử dụng hàm đọc dữ liệu Console.ReadLine() thì cần phải sử
dụng các phương thức chuyển kiểu để thực hiện chuyển kiểu dữ liệu về giá trị
mong muốn
Lập trình Windows - Lê Thị Hoàng Yến
64

1.2 GIỚI THIỆU VỀ C#


1.2.6 Nhập xuất cơ
bản trong ứng dụng
C# Console
a/- Phương thức đọc
dữ liệu

Lập trình Windows - Lê Thị Hoàng Yến


65

1.2 GIỚI THIỆU VỀ C#


1.2.7 Các cấu trúc điều khiển
a/- Cấu trúc rẽ nhánh
- Phân nhánh mã lệnh theo các điều kiện cụ thể. C# có 2 cấu trúc rẽ nhánh if
và switch
- Câu lệnh if…[else…] có cú pháp như sau:
if(<điều kiện>)
<công việc 1>
[else
<công việc 2>]

Lập trình Windows - Lê Thị Hoàng Yến


66

1.2 GIỚI THIỆU VỀ C#


1.2.7 Các cấu trúc điều khiển
a/- Cấu trúc rẽ nhánh
- Câu lệnh switch là câu lệnh điều khiển quản lý nhiều lựa chọn và liệt kê
bằng cách chuyển điều khiển đến một trong các câu lệnh case:
switch (<biểu thức>)
{
case <điều kiện 1>: <công việc 1>
case <điều kiện 2>: <công việc 2>
….
case <điều kiện n>: <công việc n>
[default: <công việc n+1>]
}
Lập trình Windows - Lê Thị Hoàng Yến
67

1.2 GIỚI THIỆU VỀ C#


1.2.7 Các cấu trúc điều khiển
b/- Cấu trúc lặp
- C# cung cấp 4 loại lệnh lặp (for, while, do…while, và foreach) cho phép lập
trình viên thực thi một khối lệnh liên tiếp cho đến khi một điều kiện xác định
nào đó còn thỏa mãn.
- Câu lệnh for có cú pháp như sau:
for (<khởi tạo>;<điều kiện>;<tăng giảm biến đếm>)
<công việc>
- Câu lệnh while có cú pháp như sau:
while (<điều kiện>)
<công việc>
Lập trình Windows - Lê Thị Hoàng Yến
68

1.2 GIỚI THIỆU VỀ C#


1.2.7 Các cấu trúc điều khiển
b/- Cấu trúc lặp
- Câu lệnh do… while có cú pháp như sau:
do
{
<công việc>
} while (<điều kiện>);

Lập trình Windows - Lê Thị Hoàng Yến


69

1.2 GIỚI THIỆU VỀ C#


1.2.7 Các cấu trúc điều khiển
b/- Cấu trúc lặp
- Câu lệnh foreach
+ Duyệt qua mỗi phần tử có
trong một tập phần tử
 nhận thông tin
+ Không dùng cho việc thêm
hoặc xóa các phần tử
+ Xét ví dụ bên:

Lập trình Windows - Lê Thị Hoàng Yến


70

1.2 GIỚI THIỆU VỀ C#


1.2.7 Các cấu trúc điều khiển
c/- Các lệnh hỗ trợ cấu trúc lặp
- Lệnh break: thực hiện việc dừng vòng lặp.
+ Khi gặp lệnh break chương tình sẽ lập tức chấm dứt vòng lặp dù điều
kiện của vòng lặp vẫn cho phép chạy tiếp
+ Trong trường hợp có nhiều vòng lặp lồng nhau, break sẽ giúp nhảy ra
khỏi điều khiển của lệnh lặp trực tiếp chứa nó (for, foreach, while, do…while)

Lập trình Windows - Lê Thị Hoàng Yến


71

1.2 GIỚI THIỆU VỀ C#


1.2.7 Các cấu trúc điều khiển
c/- Các lệnh hỗ trợ cấu trúc lặp
- Lệnh continue: khi thực hiện vòng
lặp, đôi khi người lặp trình cần thực
hiện bỏ qua một số dòng lệnh để
tiếp tục thực hiện lần lặp tiếp theo.
Lệnh continue thực hiện việc
chuyển sang lần lặp tiếp theo và bỏ
qua các lệnh nằm phía dưới nó
trong vòng lặp.

Lập trình Windows - Lê Thị Hoàng Yến


72

1.2 GIỚI THIỆU VỀ C#


1.2.8 Chú thích trong C#
- Trong quá trình lập trình, các lập trình viên cần phải chú thích thêm các đoạn
mã do mình phát triển
- Chú thích này giúp cho các thành viên trong nhóm hiểu rõ hơn ý nghĩa của
các đoạn mã do lập trình viên tạo ra
- Chú thích rất có ý nghĩa khi chương trình ở các giai đoạn phát triển, nâng
cấp và cập nhật các chức năng cho chương trình
- Ngoài ra khi thực hiện Unit Test thì cần hiểu chính xác ý nghĩa của các
phương thức và các lớp được tạo ra của từng module của chương trình

Lập trình Windows - Lê Thị Hoàng Yến


73

1.2 GIỚI THIỆU VỀ C#


1.2.8 Chú thích trong C#
- C# hỗ trợ 3 kiểu chú thích chính:
+ Chú thích trên dòng ( / / )
+ Chú thích nhiều dòng (/*…*/)
+ Chú thích sử dụng XML( / / /)
- Lợi ích sử dụng chú thích XML : tạo các tài liệu kỹ thuật nhằm mô tả chi tiết
các class, phương thức thực hiện. Sử dụng câu lệnh csc để tạo tài liệu XML
thông qua cú pháp sau:
csc /doc:<Tên tập tin .Xml sẽ tạo thành> <Đường dẫn file nguồn chứa .cs>
Ví dụ : csc /doc:”E:\Projects\Add.xml” “E:\Products\Example\AddNumber.cs”

Lập trình Windows - Lê Thị Hoàng Yến


74

1.2 GIỚI THIỆU VỀ C#


1.2.8 Chú thích trong C#

Lập trình Windows - Lê Thị Hoàng Yến


75

1.3 THAO TÁC VỚI MẢNG (ARRAY)


- Mảng (array) là một dãy các phần tử có cùng kiểu được sắp kề nhau liên tục
trong bộ nhớ.
- Các phần tử của mảng có cùng tên đó là tên mảng và để phân biệt các phần
tử với nhau chúng sẽ được đánh chỉ mục theo thứ tự vị trí
- Các phần tử trong mảng của C# được đánh chỉ mục bắt đầu tại giá trị 0
- Thao tác với mảng trong C# tương tự với thao tác với mảng trong hầu hết
các ngôn ngữ lập trình phổ biến khác
- Tuy nhiên nó vẫn có một số điểm khác biệt cần lưu ý

Lập trình Windows - Lê Thị Hoàng Yến


76

1.3 THAO TÁC VỚI MẢNG (ARRAY)


1.3.1 Cú pháp khai báo mảng
- Trong C# cung cấp các loại mảng sau:
+ Mảng một chiều (single-dimensional arrays)
+ Mảng nhiều chiều (multidimensional arrays, rectangular arrays)
+ Mảng răng cưa (array-of-arrays, jagged arrays)

Lập trình Windows - Lê Thị Hoàng Yến


77

1.3 THAO TÁC VỚI MẢNG (ARRAY)


1.3.1 Cú pháp khai báo mảng
a/- Mảng một chiều
- Mảng một chiều trong C# được khai báo với cú pháp như sau:
<kiểu dữ liệu>[ ] <tên mảng>;
- Khi khai báo mảng không có kích thước (độ lớn, số phần tử) của mảng
- Ví dụ: int [ ] numbers; // khai báo mảng với tên numbers có kích thước bất kỳ
numbers = new int [10]; // numbers là một mảng với 10 phần tử
numbers = new int [20]; // numbers là một mảng với 20 phần tử
<kiểu dữ liệu>[ ] <tên mảng> = new <kiểu dữ liệu> [<số phần tử>];

Lập trình Windows - Lê Thị Hoàng Yến


78

1.3 THAO TÁC VỚI MẢNG (ARRAY)


1.3.1 Cú pháp khai báo mảng
b/- Mảng nhiều chiều
- Mảng 2 chiều trong C# được khai báo với cú pháp như sau:
<kiểu dữ liệu>[ , ] <tên mảng>;
- Sử dụng dấu phẩy “,” để phân cách giữa các chiều của mảng
- Ví dụ: string [ , ] names;
names = new string [5, 4];
 string [ , ] names = new string [5,4];
int [ , , ] buttons = new int [4,5,3];

Lập trình Windows - Lê Thị Hoàng Yến


79

1.3 THAO TÁC VỚI MẢNG (ARRAY)


1.3.1 Cú pháp khai báo mảng
c/- Mảng răng cưa
- Mảng răng cưa (mảng lởm chởm) trong C# là một mảng với các phần tử của
nó là các mảng có số phần tử khác nhau
- Mảng dạng này trong C# được khai báo với cú pháp như sau:
<kiểu dữ liệu>[ ][ ] <tên mảng>;
- Ví dụ: int [ ] [ ] scopes;
scopes = new int [4][3]; //Sai int [ ] [ ] scopes = new int [4][ ];
scopes = new int [4][ ]; //Đúng
for (int i = 0; i < scopes.length; i++)
scopes[i] = new int [3];
Lập trình Windows - Lê Thị Hoàng Yến
80

1.3 THAO TÁC VỚI MẢNG (ARRAY)


1.3.1 Cú pháp khai báo mảng
- Ví dụ minh họa:

Lập trình Windows - Lê Thị Hoàng Yến


81

1.3 THAO TÁC VỚI MẢNG (ARRAY)


1.3.2 Khởi tạo mảng
- C# cho phép khởi tạo giá trị ban đầu của các phần tử trong mảng tại thời
điểm khai báo bằng cách kèm theo các giá trị này trong cặp dấu ngoặc móc
- Sử dụng dấu phẩy “,” để phân cách giữa các giá trị khởi tạo
Ví dụ: int [ ] numbers = new int [5] {1, 2, 3, 4, 5};
string [ , ] siblings= new string [2,2] {{“Mike”, “Amy”}, {“Mary”, “Albert”}};
int [ ][ ] numbers = new int [2][ ]{new int [ ] {2, 4}, new int[ ] {1, 3, 5}};
- Việc khởi tạo có thể bỏ qua kích thước của mảng như ví dự sau:
Ví dụ: int [ ] numbers = new int [ ] {1, 2, 3, 4, 5};
string [ , ] siblings= new string [ , ] {{“Mike”, “Amy”}, {“Mary”, “Albert”}};
int [ ][ ] numbers = new int [ ][ ]{new int [ ] {2, 4}, new int[ ] {1, 3, 5}};
Lập trình Windows - Lê Thị Hoàng Yến
82

1.3 THAO TÁC VỚI MẢNG (ARRAY)


1.3.2 Khởi tạo mảng
- Việc khởi tạo cũng có thể bỏ qua toán tử new như ví dự sau:
Ví dụ: int [ ] numbers = {1, 2, 3, 4, 5};
string [ , ] siblings= {{“Mike”, “Amy”}, {“Mary”, “Albert”}};
int [ ][ ] numbers = {new int [ ] {2, 4}, new int[ ] {1, 3, 5}};

Lập trình Windows - Lê Thị Hoàng Yến


83

1.3 THAO TÁC VỚI MẢNG (ARRAY)


1.3.3 Truy xuất phần tử mảng
- Tương tự như trong C và C++, việc truy xuất một phần tử trong mảng được
dựa trên chỉ mục (chỉ số vị trí) của phần tử đó
- Ví dụ 1: int [ ] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
Console.WriteLine(“Phan tu o vi tri [4]: {0}”,numbers[4]); // trả về 6
numbers[4] = 5; // Gán giá trị 5 cho phần tử ở vị trí [4]
Console.WriteLine(“Phan tu o vi tri [4]: {0}”,numbers[4]); // trả về 5

Lập trình Windows - Lê Thị Hoàng Yến


84

1.3 THAO TÁC VỚI MẢNG (ARRAY)


1.3.3 Truy xuất phần tử mảng
- Ví dụ 2: int [ , ] numbers2 = {{1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}};
Console.WriteLine(“Phan tu o vi tri [1,1]: {0}”,numbers2[1,1]); // trả về 4
numbers2[1,1] = 7; // Gán giá trị 5 cho phần tử ở vị trí [1,1]
Console.WriteLine(“Phan tu o vi tri [1,1]: {0}”,numbers2[1,1]); // trả về 7

- Ví dụ 3: int [ ][ ] scopes = new int [ ][ ] {new int [ ]{1, 3},new int [ ] {2, 4, 6}};
scopes[0][0] = 68;
scopes[1][2] = 546; Sai/ Đúng?????
scopes[1][3]=342;

Lập trình Windows - Lê Thị Hoàng Yến


85

1.3 THAO TÁC VỚI MẢNG (ARRAY)


1.3.4 Mảng là đối tượng
- Trong C#, các mảng thật chất là các đối tượng
- System.Array là kiểu dữ liệu cơ sở trừu tượng của tất cả các kiểu mảng
 Có thể sử dụng các thuộc tính và thành phần khác của System.Array
cho việc xử lý mảng
- Ví dụ: + Thuộc tính Length cho biết chiều dài của mảng
int[ ] numbers = { 1, 2, 3, 4, 5 };
int LengthOfNumbers = numbers.Length;
+ Phương thức Sort cho phép sắp xếp lại mảng
System.Array.Sort(numbers);

Lập trình Windows - Lê Thị Hoàng Yến


86

1.3 THAO TÁC VỚI MẢNG (ARRAY)


1.3.5 Sử dụng foreach trên mảng
- C# cung cấp câu lệnh foreach cho việc duyệt qua các phần tử trong mảng
- Ví dụ: dùng vòng lặp foreach cho việc in các phần tử trong mảng
int[ ] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };
foreach (int i in numbers)
Console.Write (i + “\t”);
 kết quả thu được sẽ là dãy: 4 5 6 1 2 3 -2 -1 0
int[ , ] numbers = new int[3, 2] { { 9, 99 }, { 3, 33 }, { 5, 55 } };
foreach (int i in numbers)
Console.Write("{0} ", i);
 kết quả thu được sẽ là dãy: 9 99 3 33 5 55
Lập trình Windows - Lê Thị Hoàng Yến
87

1.4 KIỂU DỮ LIỆU LIỆT KÊ (ENUM)


- Từ khóa enum dùng để khai báo kiểu dữ liệu liệt kê trong C#, một kiểu dữ
liệu riêng biệt bao gồm các hằng có giá trị không đổi (gọi là danh sách liệt kê)
- Khi khai báo một kiểu liệt kê, chúng ta xác định một tập các giá trị có thể
nhận được thông qua các tên gọi có tính gợi nhớ
Ví dụ:
+ enum NhietdoNuoc {DoDong=0, DoNguoi = 20, DoAm=40, DoSoi=100};
+ enum Days{Sat, Sun, Mon, Tue, Wed, Thu, Fri};
- Mỗi thành phần trong kiểu liệt kê tương ứng với một giá trị số, trong trường
hợp này là một số nguyên. Nếu chúng ta không khởi tạo cho các thành phần
này thì chúng sẽ nhận các giá trị tiếp theo với thành phần đầu tiên là 0
Ví dụ: + enum Thutu{ThuNhat, ThuHai, ThuBa = 11, ThuTu};
Lập trình Windows - Lê Thị Hoàng Yến
88

1.4 KIỂU DỮ LIỆU LIỆT KÊ (ENUM)


- Mỗi kiểu liệt kê có một kiểu dữ liệu cơ sở  xác định số lượng vùng nhớ cần
cấp phát cho mỗi enumerator
- Kiểu cơ sở được chấp nhận: byte, sbyte, short, ushort, int, uint, long, ulong
- Cú pháp khai báo kiểu dữ liệu liệt kê:
enum <tên liệt kê> [:kiểu cơ sở]{danh sách các thành phần liệt kê};
Ví dụ: enum Days : byte { Sat = 1, Sun, Mon, Tue, Wed, Thu, Fri };
- Cần sử dụng chuyển đổi kiểu tường minh để chuyển kiểu enum sang các
kiểu dữ liệu cơ sở
Ví dụ: int x = (int)Days.Sun;
- Kiểu dữ liệu liệt kê có thể được khai báo trong một namespace để cho tất cả
các class có thể truy xuất dễ dàng, hoặc có thể lồng trong một class hoặc
struct
Lập trình Windows - Lê Thị Hoàng Yến
89

1.4 KIỂU DỮ LIỆU LIỆT KÊ (ENUM)

Lập trình Windows - Lê Thị Hoàng Yến


90

1.5 NAMESPACE
- namespace là từ khóa dùng để khai
báo một phạm vi bao gồm tập các đối
tượng có quan hệ với nhau
- namespace được sử dụng để tổ chức
các thành phần mã nguồn (code
elements) và tạo ra các kiểu duy nhất
toàn cục

Lập trình Windows - Lê Thị Hoàng Yến


91

1.5 NAMESPACE
- Trong namespace có thể khai báo các
thành phần sau:
+ Namespace khác
+ class
+ interface
+ struct
+ enum
+ delegate

Lập trình Windows - Lê Thị Hoàng Yến


92

1.5 NAMESPACE
- Để truy xuất thành phần namespace
ta sử dụng cú pháp:
<tên namespace>. <tên thành phần>
Ví dụ:
+ SampleNamespace.SampleStruct
+ SampleNamespace.SampleClass
+ SampleNamespace.SampleInterface

Lập trình Windows - Lê Thị Hoàng Yến


93

1.5 NAMESPACE
- Chúng ta cũng có thể lồng các
namespace bên trong các namespace
khác, qua đó tạo ra cấu trúc phân lớp
cho các kiểu dữ liệu
- Tên namespace bao gồm các tên
namespace chứa nó, phân cách nhau
bằng dấu chấm. Bắt đầu với
namespace ngoài cùng nhất, và kết
thúc bằng chính tên ngắn gọn của nó
Ví dụ: tên đầy đủ của namespace
Nested là SampleNamespace.Nested
Lập trình Windows - Lê Thị Hoàng Yến
94

1.5 NAMESPACE
1.5.1 Khai báo sử dụng namespace
- C# cho phép sử dụng tên ngắn để xác định kiểu dữ liệu bằng cách xác định
trước namespace của kiểu dữ liệu này với từ khóa using ở đầu file mã nguồn
- Ví dụ: Ở đầu file mã nguồn có
khai báo using VLUTE.FIT.CSharp
thì trong file mã nguồn đó chúng
ta có thể sử dụng tên ngắn gọn
của lớp đối tượng Student thay vì
tên đầy đủ của nó là:
VLUTE.FIT.CSharp.Student

Lập trình Windows - Lê Thị Hoàng Yến


95

1.5 NAMESPACE
1.5.1 Khai báo sử dụng namespace
- Trong trường hợp tên ngắn của hai kiểu dữ liệu thuộc về hai namespace
cùng tham khảo là trùng nhau
 phải chỉ định rõ với tên namespace cụ thể khi sử dụng
- Chẳng hạn, giả sử lớp đối tượng có tên Student được định nghĩa trong cả
hai namespace VLUTE.FIT.CSharp vàVLUTE.FIT.WebPrograming; khi đó
chúng ta cần xác định lớp Student bằng một cái tên dài hơn, CSharp.Student
hoặc WebPrograming.Student tùy theo từng tình huống.
Ví dụ: CSharp. Student nvanh = new CSharp.Student();
WebPrograming.Student hanhky = new WebPrograming.Student();

Lập trình Windows - Lê Thị Hoàng Yến


96

1.5 NAMESPACE
1.5.2 Bí danh cho namespace
- Một cách sử dụng khác của từ khóa using đó là gán bí danh cho các lớp đối
tượng và các namespace. Cú pháp của cách sử dụng này là như sau:
using <bí danh> = <tên namespace>;
- Ví dụ:
//khai báo
using cs = VLUTE.FIT.CSharp;
using web = VLUTE.FIT.WebPrograming;
//Sử dụng
cs.Student nvanh = new cs.Student();
web.Student hanhky = new web.Student();
Lập trình Windows - Lê Thị Hoàng Yến

You might also like