Tài liệu Chuyên đề Lập trình ứng dụng sử dụng C#.net: 1Môn học
CHUYÊN ĐỀ: Lập trình ứng dụng sử dụng
C#.NET
(tài liệu lưu hành nội bộ)
GV: Phạm Văn Thuận
Bộ môn Kỹ thuật Máy tính
Khoa CNTT- ĐH BKHN
email: thuanpv@it-hut.edu.vn
2Lập trình C#.NET
Mục tiêu môn học
§ Sau khi kết thúc môn học này, sinh viên có thể
• Trình bày được đặc trưng cơ bản của công nghệ
.NET
• Trình bày được kỹ thuật lập trình hướng đối
tượng sử dụng ngôn ngữ C#.NET
• Lập trình được một ứng dụng Windows Form sử
dụng ngôn ngữ C#.NET, kết nối với cơ sở dữ liệu
SQL Server, lập báo cáo sử dụng công cụ Crystal
Report.
3Lập trình C#.NET
§ Tài liệu tham khảo chính:
• Programming C#, 4th Edition, Jesse Liberty
• Pro .NET 2.0 Windows Forms and Custom
Controls in C#, Matthew MacDonald
• Professional C#, 2nd Edition, Wrox Press Ltd
(Bản dịch tiếng Việt)
• ftp://dce.hut.edu.vn/thuanpv/C_Sharp
4Lập trình C#.NET
Nội dung môn học
Chương 1: Giới thiệu C# và .NET Framework
Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio .NET 2005
Chư...
214 trang |
Chia sẻ: Khủng Long | Lượt xem: 1243 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Chuyên đề Lập trình ứng dụng sử dụng C#.net, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
1Môn học
CHUYÊN ĐỀ: Lập trình ứng dụng sử dụng
C#.NET
(tài liệu lưu hành nội bộ)
GV: Phạm Văn Thuận
Bộ môn Kỹ thuật Máy tính
Khoa CNTT- ĐH BKHN
email: thuanpv@it-hut.edu.vn
2Lập trình C#.NET
Mục tiêu môn học
§ Sau khi kết thúc môn học này, sinh viên có thể
• Trình bày được đặc trưng cơ bản của công nghệ
.NET
• Trình bày được kỹ thuật lập trình hướng đối
tượng sử dụng ngôn ngữ C#.NET
• Lập trình được một ứng dụng Windows Form sử
dụng ngôn ngữ C#.NET, kết nối với cơ sở dữ liệu
SQL Server, lập báo cáo sử dụng công cụ Crystal
Report.
3Lập trình C#.NET
§ Tài liệu tham khảo chính:
• Programming C#, 4th Edition, Jesse Liberty
• Pro .NET 2.0 Windows Forms and Custom
Controls in C#, Matthew MacDonald
• Professional C#, 2nd Edition, Wrox Press Ltd
(Bản dịch tiếng Việt)
• ftp://dce.hut.edu.vn/thuanpv/C_Sharp
4Lập trình C#.NET
Nội dung môn học
Chương 1: Giới thiệu C# và .NET Framework
Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio .NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
5Lập trình C#.NET
Nội dung môn học
Chương 1: Giới thiệu C# và .NET Framework
Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio .NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
6Lập trình C#.NET
Nội dung môn học
Chương 1: Giới thiệu C# và .NET Framework
Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio .NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
7Lập trình C#.NET
Nội dung chương 1
1.1. Nền tảng .NET (.NET Flatform)
1.2. Kiến trúc .NET (.NET Framework)
1.3. Biên dịch trong .NET
1.4. Ngôn ngữ lập trình C#
8Lập trình C#.NET
1.1. Nền tảng .NET (.NET Flatform)
.NET Platform là nền tảng phát triển:
- Cung cấp giao diện lập trình (API) cho các dịch
vụ (services) và các hàm API truyền thống của
hệ điều hành Windows
- Cung cấp một nền tảng phát triển chung cho
nhiều ngôn ngữ lập trình khác nhau của
Microsoft: C#, Visual J#, Visual Basic
9Lập trình C#.NET
Nền tảng .NET (.NET Flatform)
.NET Platform bao gồm các nhóm sản phẩm
• Tập hợp các ngôn ngữ (C#, VB), một tập hợp
các công cụ phát triển bao gồm Visual Studio
.NET, thư viện để phát triển các ứng dụng web
(web and web services), các ứng dụng Windows
cũng như môi trường thực thi chung (Common
Language Runtime (CLR))
• Nền tảng .NET 2.0 không chỉ hỗ trợ các ứng dụng
trên máy tính cá nhân, máy chủ mà còn hỗ trợ
các thiết bị nhúng (Cell phones, game boxes)
10
Lập trình C#.NET
1.2. Kiến trúc .NET (.NET Framework)
§ Microsoft .NET hỗ trợ nhiều ngôn ngữ khác nhau
nhờ hệ thống - Common Type System (CTS)
§ Quy định những yêu cầu tối thiểu để một ngôn
ngữ lập trình có thể tích hợp vào .NET –
Common Language Specification (CLS)
§ Kiến trúc .NET là tầng ngay trên hệ điều hành,
bao gồm:
• 5 ngôn ngữ lập trình chính thức: C#, VB, VC++,
Visual J# và Jscript.NET
• CLR (Common Language Runtime)
• Các thư viện lập trình
11
Lập trình C#.NET
.NET Framework
12
Lập trình C#.NET
1.3. Biên dịch trong .NET
§ .NET không biên dịch trực tiếp các chương trình
thành file thực thi.
§ .NET biên dịch các chương trình thành các
assembly, chứa các mã chương trình trung gian
của Microsoft (Microsoft Intermediate Language -
MSIL)
§ CLR sẽ dịch một lần nữa, sử dụng chương trình
biên dịch Just In Time (JIT) chuyển các mã MSIL
sang mã máy và thực thi
13
Lập trình C#.NET
Biên dịch trong .NET
14
Lập trình C#.NET
1.4. Ngôn ngữ lập trình C#
§ C# được phát triển bởi nhóm tác giả điều hành
bởi Anders Hejlsberg và Scott Wiltamuth, tác giả
của Turbo Pascal và Borland Delphi.
§ C# là ngôn ngữ lập trình hướng đối tượng
(Object Oriented Language)
• Hỗ trợ định nghĩa và làm việc với lớp (class)
• Hỗ trợ đầy đủ ba cơ chế đặc trưng của lập trình
hướng đối tượng: đóng gói (encapsulation), kế
thừa (inheritance) và đa hình (polymorphism)
15
Lập trình C#.NET
Nội dung môn học
Chương 1: Giới thiệu C# và .NET Framework
Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio .NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
16
Lập trình C#.NET
Nội dung chương 2
2.1. Môi trường phát triển ứng dụng .NET
2.2. Chương trình Hello World
2.3. Môi trường phát triển ứng dụng Visual Studio
.NET
17
Lập trình C#.NET
2.1. Môi trường phát triển ứng dụng .NET
§ Môi trường thực thi ứng dụng .NET: Microsoft
.NET Framework
•
§ Trình soạn thảo và biên dịch
- Visual Studio .NET IDE
- Trình soạn thảo văn bản (Notepad, UltraEdit) &
Trình biên dịch bằng dòng lệnh (Command-line
compiler)
18
Lập trình C#.NET
2.2. Chương trình Hello World
1) Mở chương trình Visual Studio .NET 2005
2) Tạo một dự án mới với kiểu ứng dụng console(HelloWorld)
19
Lập trình C#.NET
Chương trình Hello World
§Chương trình sẽ
tự tạo một khung
dự án
§Thêm dòng
code đơn giản
hiển thị thông
báo helloworld ra
màn hình
§Bấm F6 để biên
dịch, F5 để chạy
20
Lập trình C#.NET
Chương trình Hello World
Kết quả khi chạy chương trình Hello World
21
Lập trình C#.NET
Một số khái niệm cơ bản trong C#
§ Chú thích
• Chú thích trên một dòng dùng //
• Chú thích trên nhiều dòng dùng /* */
• Trình biên dịch bỏ qua chú thích
• Chỉ dùng cho người đọc
§ Namespaces (Không gian tên)
• Nhóm các tính năng có liên quan của C# vào một loại
• Cho phép dễ dàng tái sử dụng mã
• Trong thư viện .NET framework có nhiều không gian tên
• Phải tham chiếu tới để sử dụng
22
Lập trình C#.NET
Một số khái niệm cơ bản trong C#
§ Kí tự cách trắng (White Space)
• Chứa các khoảng trống, ký tự xuống dòng và
tabs
§ Từ khoá (Keywords)
• Các từ không được dùng làm tên biến,tên lớp
hay bất kỳ thứ gì khác
• Có các chức năng đặc biệt không thể thay đổi
trong ngôn ngữ
• Ví dụ : class
• Tất cả các từ khoá đều được viết thường
23
Lập trình C#.NET
Một số khái niệm cơ bản trong C#
§ Lớp (class): định nghĩa một kiểu dữ liệu, mô tả
một nhóm các đối tượng với các phương thức và
thuộc tính
• Phương thức (Method)
• Thuộc tính (Property)
24
Lập trình C#.NET
Chương trình Hello World
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
}
Using statement
Namespace
Class
Static function
Code statement
25
Lập trình C#.NET
2.3. Visual Studio .NET IDE 2005
Giao diện làm việc chính
26
Lập trình C#.NET
Gỡ lỗi sử dụng VS.NET 2005
Set breakpoint
-Nhấn F9 hoặc
-Click chuột trái
vào bên lề trái
của hàng cần đặt
breakpoint
27
Lập trình C#.NET
Gỡ lỗi sử dụng VS.NET 2005
Bắt đầu quá trình debug: nhấn F5 (Debug -> Start Debugging”
28
Lập trình C#.NET
Gỡ lỗi sử dụng VS.NET 2005
Xem giá trị của các biến, đối tượng
Xem giá trị các biến, đối tượng tại cửa sổ local
29
Lập trình C#.NET
Nội dung môn học
Chương 1: Giới thiệu C# và .NET Framework
Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio .NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
30
Lập trình C#.NET
Nội dung chương 3
3.1. Kiểu dữ liệu (Types)
3.2. Biến và hằng số (Variables and Constants)
3.3. Các câu lệnh và cấu trúc điều khiển
(Statements)
3.4. Các toán tử (Operators)
31
Lập trình C#.NET
3.1. Kiểu dữ liệu (Types)
§ C# là ngôn ngữ định kiểu mạnh:
• Phải định nghĩa kiểu dữ liệu của mỗi đối tượng
(Ví dụ: integers, floats, strings, buttons)
• Trình biên dịch sẽ kiểm tra và đảm bảo ngăn
chặn các lỗi do các phép gán sai kiểu dữ liệu
§ Phân loại dữ liệu
§ Phân theo phương thức định nghĩa: build-in (có
sẵn) và user-defined (người dùng tự định nghĩa)
§ Phân theo cách thức lưu trữ: value (tham trị) và
reference (tham chiếu)
32
Lập trình C#.NET
Kiểu dữ liệu (Types)
§ Kiểu tham trị (value type)
• Lưu trữ trong vùng nhớ ngăn xếp (stack)
§ Kiểu tham chiếu (reference type)
• Địa chỉ lưu trữ trong ngăn xếp (stack)
• Dữ liệu thực được lưu trữ trong vùng nhớ Heap
Cho phép lưu trữ đối
tượng có kích thước lớn
33
Lập trình C#.NET
Kiểu dữ liệu có sẵn (build-in type)
§ C# hỗ trợ một số kiểu dữ liệu có sẵn, mỗi kiểu
dữ liệu này tương ứng với một kiểu dữ liệu hỗ
trợ bởi .NET CLS (Common Language System).
§ C# có thể sử dụng đối tượng do các ngôn ngữ
khác trong bộ .NET tạo ra và ngược lại (Ví dụ:
VB.NET)
§ Mỗi kiểu dữ liệu có kích thước xác định
34
Lập trình C#.NET
Kiểu dữ liệu có sẵn (build-in type)
35
Lập trình C#.NET
Kiểu dữ liệu có sẵn (build-in type)
36
Lập trình C#.NET
Escape Character
37
Lập trình C#.NET
Chuyển đổi kiểu dữ liệu
§ Có hai cách chuyển đổi kiểu dữ liệu có sẵn
• Chuyển đổi ngầm (implicity): quá trình chuyển
đổi diễn ra tự động và đảm bảo không bị mất mát
dữ liệu
üVí dụ: short x=5;
int y=x;
• Chuyển đổi tường minh (explicity) sử dụng
toán tử chuyển đổi (cast operator)
üVí dụ: (char)65 -> chuyển đổi từ số sang ký tự
38
Lập trình C#.NET
3.2. Biến và hằng số (Variables and Constants)
§ Biến (variable):
• Một vùng nhớ có định kiểu
• Có thể gán và thay đổi được giá trị
• Các biến phải được khởi gán trước khi sử dụng,
nếu không, trình biên dịch sẽ báo lỗi
int myInt;
System.Console.WriteLine ("Uninitialized, myInt: {0}",
myInt);
39
Lập trình C#.NET
Hằng số
§ Hằng số (Constant)
• Là biến số nhưng không thể thay đổi giá trị sau
khi khởi gán.
const int myConst=32;
myConst = 30;
40
Lập trình C#.NET
Kiểu liệt kê
§ Kiểu liệt kê chứa một tập hợp các hằng số
(enumerator list). Lợi ích của enumerator
• Cho phép nhóm một tập hợp các hằng số có liên
quan với nhau -> tránh phải khai báo nhiều hằng
số và tăng mối quan hệ logic giữa các hằng số
• Làm đơn giản hóa mã chương trình
enum GoodWeather : uint
{
temperature=28,
moisture=80,
wind=5
}
41
Lập trình C#.NET
Chuỗi (string) và cách đặt tên trong C#
§ Chuỗi là một mảng các ký tự
§ Khai báo và khởi gán giá trị cho chuỗi
• string myString=“Test String”;
§ Trong C#, chúng ta nên đặt tên các biến, các
phương thức, các lớptheo khuyến cáo của
Microsoft
• Tên biến: bắt đầu bằng chữ thường
(VD: someName)
• Tên phương thức và các thành phần khác: bắt
đầu bằng chữ hoa (VD: SomeOtherMethod)
42
Lập trình C#.NET
3.3. Các câu lệnh (statements)
§ Một chương trình C# là một dãy các câu lệnh
(statements)
§ Mỗi câu lệnh kết thúc bởi dấu “;”
§ Các câu lệnh được xử lý tuần tự theo chiều từ
trên xuống dưới (trừ các câu lệnh điều khiển:
lệnh nhảy, lệnh lặp)
int x; // a statement
x = 23; // another statement
int y = x; // yet another statement
43
Lập trình C#.NET
Lệnh nhảy không điều kiện
§ Có hai trường hợp phát sinh lệnh nhảy không
điều kiện:
• Có lời gọi một phương thức: dừng phương thức
hiện tại và chuyển sang (nhảy không điều kiện)
thực hiện phương thức vừa triệu gọi, sau khi thực
hiện xong, trở về phương thức trước đó.
• Sử dụng một trong số các lệnh nhảy không điều
kiện: goto, break, continue, return hoặc throw
44
Lập trình C#.NET
Lệnh nhảy có điều kiện
§ Câu lệnh: ifelse
§ Câu lệnh điều kiện lồng (Nested if)
§ Câu lệnh chọn: switchcase
45
Lập trình C#.NET
Câu lệnh điều kiện ifelse
if (Biểu thức điều kiện)
Công việc 1
[else Công việc 2]
int valueOne = 10;
int valueTwo = 15;
if(valueOne>=valueTwo)
{
Console.WriteLine("Max= {0}",valueOne);
}
else
{
Console.WriteLine("Max= {0}",valueTwo);
}
46
Lập trình C#.NET
Câu lệnh điều kiện lồng (Nested if)
§ Có thể được sử dụng trong những câu lệnh điều
kiện phức tạp, điều kiện lồng nhau.
char charTest = 'z';
if (charTest < 'A')
{
Console.WriteLine("Khong phai chu cai hoa");
}
else
{
if (charTest > 'Z')
{
Console.WriteLine("Khong phai chu cai hoa");
}
else
{
Console.WriteLine("La chu cai hoa");
}
}
47
Lập trình C#.NET
Câu lệnh chọn: switchcase
switch (biểu thức cần kiểm tra)
{
case trường_hợp:
Các câu lệnh
Lệnh nhảy (break, continue)
[default: Các câu lệnh cho trường hợp mặc định]
}
48
Lập trình C#.NET
Câu lệnh chọn: switchcase
static void Main(string[] args)
{
const int Vietnam = 0;
const int Laos = 1;
const int Cambodia = 2;
const int Thailand = 3;
int country=Thailand;
switch (country)
{
case Vietnam:
Console.WriteLine("The Capital is Hanoi");
break;
case Laos:
Console.WriteLine("The Capital is Vientiane");
break;
case Cambodia:
Console.WriteLine("The Capital is Phnompenh");
break;
default:
Console.WriteLine("This country isn't belong to The Indochinese Peninsula");
break;
}
49
Lập trình C#.NET
Câu lệnh chọn: switchcase
static void Main(string[] args)
{
string country="Vietnam";
switch (country)
{
case "Vietnam":
Console.WriteLine("The Capital is Hanoi");
break;
case "Laos":
Console.WriteLine("The Capital is Vientiane");
break;
case "Cambodia":
Console.WriteLine("The Capital is Phnompenh");
break;
default:
Console.WriteLine("This country isn't belong to The Indochinese Peninsula");
break;
}
50
Lập trình C#.NET
Các lệnh lặp
§ Vòng lặp for
§ Vòng lặp while
§ Vòng lặp dowhile
§ Vòng lặp foreach : sử dụng để lặp qua các phần
tử của một mảng hay một tập hợp
51
Lập trình C#.NET
Vòng lặp for
for ( [initializers]; [expression]; [iterators]) statement
Khởi tạo
Biểu thức kiểm tra
Lệnh lặp
Công việc cần thực thi
for (int i=0; i<10; i++)
Console.WriteLine(“Current value = {0}”,i);
52
Lập trình C#.NET
Vòng lặp for (Ví dụ)
static void Main(string[] args)
{
for (int i = 0; i < 25; i++)
{
if (i % 5 == 0)
{
Console.Write("\n");
Console.Write("\t{0}", i);
}
else
{
Console.Write("\t{0}", i);
}
}
}
53
Lập trình C#.NET
Vòng lặp while
while (expression) statement
Biều thức kiểm tra Công việc cần thực thi
static void Main(string[ ] args)
{
int iTest=0 ;
while(iTest<10)
{
Console.Write("{0}",iTest);
iTest++;
}
}
54
Lập trình C#.NET
Vòng lặp dowhile
do statement while expression
Biều thức kiểm traCông việc cần thực thi
static void Main(string[ ] args)
{
int i = 11;
do
{
Console.WriteLine("i: {0}", i);
i++;
} while (i < 10);
}
55
Lập trình C#.NET
3.4. Toán tử (Operator)
§ Toán tử được phân thành nhiều liệu khác nhau
• Toán tử gán (assignment operator): =
• Toán tử toán học (arithmetic operators): +, -, *
• Toán tử tăng, giảm (increment and decrement
operators): ++, --, -=, *=
• Toán tử quan hệ (relational operators): ==, !=
• Toán tử logic (logical operators): &&, ||
• Toán tử ba thành phần (Ternary Operator)
56
Lập trình C#.NET
Toán tử toán học
§ Các toán tử cơ bản: cộng (+), trừ (-), nhân (*),
chia (/)
§ Toán tử chia lấy phần dư (modulus): %
static void Main(string[] args)
{
int i1 = 17;
int i2 = 4;
Console.WriteLine("Integer:{0} \nFloat:{1} \nModulus:{2}",
i1 / i2, (float)i1 / i2, i1 % i2);
}
57
Lập trình C#.NET
Toán tử tăng, giảm
myInt=myInt+10
myInt=myInt-10
myInt=myInt*10
myInt=myInt/10
myInt+=10
myInt-=10
myInt*=10
myInt/=10
Postfix: myInt++
myInt--
Prefix : ++myInt
--myInt
Gán trước, biến đổi sau
VD: myInt=1;
newInt=myInt++;
Biến đổi trước, gán sau
VD: myInt=1;
newInt=++myInt
newInt=1
newInt=2
58
Lập trình C#.NET
Toán tử quan hệ
So sánh nhỏ hơn hoặc bằng<=
So sánh nhỏ hơn<
So sánh lớn hơn hoặc bằng>=
So sánh lớn hơn>
So sánh khác nhau!=
So sánh bằng==
TênToán tử
59
Lập trình C#.NET
Toán tử logic
Toán tử “phủ định” logic
!(x==3) -> true
!
Toán tử “hoặc” logic
(x==3) || (y==7) -> true
||
Toán tử “và” logic
(x==3) && (y==7) -> false
&&
Chức năngToán tử
Chú thích: dữ liệu kiểm tra, x=5 và y=7
60
Lập trình C#.NET
Toán tử ba thành phần
conditional-expression ? expression1 : expression2
§ Conditional-expression: biểu thức kiểm tra điều kiện
§ Expression1: biểu thức 1, thực hiện khi biểu thức kiểm
tra trả về true
§ Expression2: biểu thức 2, thực hiện khi biểu thức kiểm
tra trả về false
§ Ví dụ:
int valueOne = 10;
int valueTwo = 20;
int maxValue = valueOne > valueTwo ? valueOne : valueTwo;
61
Lập trình C#.NET
Bài thực hành số 1
62
Lập trình C#.NET
Bài thực hành số 1
Bài 1: Viết một chương trình cho phép người dùng
nhập tên của họ, sau đó in lại tên đó dưới dạng
một lời chào
Bài 2: Viết một chương trình gọi một phương thức
tính bình phương của một số
63
Lập trình C#.NET
Bài thực hành số 1
Bài 3: Viết đoạn chương trình đọc vào một số
nguyên dương và kiểm tra số đó là chẵn hay lẻ
Bài 4: Viết đoạn chương trình hiển thị bảng cửu
chương của số bất kỳ (từ 1 đến 9)
64
Lập trình C#.NET
Bài thực hành số 1
Bài 5: Viết chương trình hiển thị một tam giác
vuông cân tạo thành từ các ký tự bất kỳ, có độ dài
cạnh nhập từ bàn phím
65
Lập trình C#.NET
Nội dung môn học
Chương 1: Giới thiệu C# và .NET Framework
Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio .NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
66
Lập trình C#.NET
Nội dung chương 4
4.1. Cơ bản về lập trình hướng đối tượng
4.2. Lớp và đối tượng (Class and Object)
4.3. Kỹ thuật kế thừa và đa hình (Inheritance and
Polymorphism)
4.4. Kỹ thuật chồng toán tử (Operator Overloading)
4.5. Cấu trúc struct
4.6. Interfaces
4.7. Mảng, chỉ số và tập hợp (Arrays, Indexers)
4.8. Xử lý chuỗi
4.9. Bắt ngoại lệ (Handling Exception)
4.10. Delegates và Events
67
Lập trình C#.NET
4.1. Cơ bản về lập trình hướng đối tượng
Loài cá vàng
Class
• Quy các thành phần của
hệ thống về các đối tượng
• Một đối tượng là một thể
hiện của một lớp (class)
Con cá vàng 1
Con cá vàng 2
Con cá vàng 3
Object
68
Lập trình C#.NET
Thuộc tính và phương thức
Lớp và các đối tượng thuộc
lớp đó có chung các thuộc
tính (properties) và phương
thức (methods)
• Thuộc tính (Property): kích
thước, màu, giới tính
• Phương thức (Method):
bơi, thở, ăn
69
Lập trình C#.NET
Kế thừa (Inheritance)
70
Lập trình C#.NET
Các quan hệ (relationships)
Các đối tượng không tồn tại một cách độc lập,
luôn tồn tại mối quan hệ giữa nó và các đối tượng
khác: tổng quát hóa (generalization) , cộng tác
(asscociation)
§ Các đồ vật nằm trong
phòng
§ Lọ hoa ở trên bàn
§ Bàn và ghế thuộc
nhóm đồ nội thất
71
Lập trình C#.NET
Tổng quát hóa (generalization)
§ Lớp cha (fish) tổng quát hóa các thuộc tính,
phương thức chung của các lớp con (Goldfish và
Shark).
§ Các lớp con cũng có những thuộc tính, phương
thức riêng.
72
Lập trình C#.NET
Quan hệ cộng tác (Association)
§ Các lớp có liên kết (connected) hoặc liên quan
(related) với nhau
Cd player + Speaker
(Collaboration)
Shark eat fish
73
Lập trình C#.NET
Quan hệ kết tập (Aggregation)
Thể hiện mối quan hệ giữa tổng thể (the whole) và
bộ phận (parts)
• Tổng thể: đàn cá vàng
• Bộ phận: từng con cá vàng
74
Lập trình C#.NET
Quan hệ cấu thành (Composition)
§ Là một dạng của quan hệ kết tập, tuy nhiên yêu
cầu chặt chẽ hơn
• Mỗi bộ phận (part) chỉ nằm trong một cái tổng thể
(the whole) duy nhất
üVD: phòng ngủ nhà bạn phải nằm trong nhà bạn,
không thể nằm trong nhà hàng xóm hay bất cứ
ngôi nhà nào khác
75
Lập trình C#.NET
Quan hệ cấu thành (Composition)
§ Khi phá hủy cái tổng thể thì đồng thời cái bộ
phận cũng bị phá hủy
Phá nhà
Phá phòng ngủ
76
Lập trình C#.NET
Quan hệ (relationship)
§ Số lượng đối tượng tham gia vào quan hệ
• Quan hệ 1 – 1
üMột lớp học trong một phòng học
• Quan hệ 1 – nhiều
üMột giáo viên có thể dạy nhiều lớp
• Quan hệ nhiều – nhiều
üMột giáo viên dạy nhiều sinh viên
üMột sinh viên học nhiều giáo viên
77
Lập trình C#.NET
Tính đa hình (Polymorphism)
§ Đa hình: là khả năng có thể thực hiện cùng một
hành động (phương thức) với nhiều cách thức
khác nhau không phụ thuộc vào đối tượng cụ thể
thuộc về lớp nào
78
Lập trình C#.NET
4.2. Lớp và đối tượng
§Định nghĩa lớp (class)
[attributes] [access-modifiers] class identifier [:base-class [,interface(s)]]
{class-body}
Access-modifiers : quyết định phạm vi truy cập tới
các thuộc tính và phương thức của lớp
Identifier : tên lớp
Base-class : lớp cơ sở (lớp cha)
Class-body : định nghĩa các thuộc tính và phương
thức của lớp
79
Lập trình C#.NET
Access-modifiers
Có thể được truy xuất bởi các phương thức của
lớp đó, lớp dẫn xuất từ lớp đó và các lớp trong
cùng Assembly với nó
internal protected
Có thể được truy xuất bởi các phương thức của
các lớp trong cùng Assembly
internal
Có thể được truy xuất bởi các phương thức của
chính lớp đó và các lớp dẫn xuất (derived) từ nó
protected
Chỉ có thể truy xuất bởi các phương thức của
chính lớp đó
private
Không giới hạn. Các thành phần public có thể
được truy xuất bởi bất cứ phương thức của bất kỳ
lớp nào khác
public
Giới hạn truy nhậpAccess-modifier
80
Lập trình C#.NET
Ví dụ định nghĩa lớp
public class Time
{
// Các thuộc tính private
int Year;
int Month;
int Date;
int Hour;
int Minute;
int Second;
// Các phương thức public
public void DisplayCurrentTime()
{
Console.WriteLine("Ngay, gio hien tai");
}
}
Khai báo lớp
Các thuộc tính
(phương thức
truy cập mặc
định là private)
Phương thức
của lớp
81
Lập trình C#.NET
Khai báo và sử dụng đối tượng của lớp
public class Tester
{
static void Main()
{
Time t = new Time();
t.DisplayCurrentTime();
}
}
82
Lập trình C#.NET
Tạo đối tượng (create object)
§ Sử dụng từ khóa “new”
Class_name Object_name = new Class_name( );
Ví dụ:
Time t=new Time( );
§ Đối tượng là biến kiểu tham chiếu, không phải
tham trị.
• Biến t không chứa giá trị của đối tượng
• Biến t chứa địa chỉ của đối tượng được tạo trong
bộ nhớ Heap
83
Lập trình C#.NET
Hàm tạo (constructor)
§ Khởi tạo một đối tượng -> gọi hàm tạo
(constructor)
• Hàm tạo mặc định: sẽ được CLR cung cấp nếu
người lập trình không định nghĩa
• Hàm tạo do người lập trình định nghĩa
§ Hàm tạo có chức năng:
• Tạo một đối tượng của lớp và chuyển nó sang
trạng thái xác định (valid state)
• Hàm tạo thường được dùng để khởi gán các
thuộc tính của đối tượng
84
Lập trình C#.NET
Hàm tạo mặc định (default constructor)
§ Hàm tạo mặc định tạo đối tượng của lớp, ngoài ra
không làm gì khác
§ Các thuộc tính được khởi gán các giá trị mặc định
nullreference
0enum
‘\0’ (null)char
falsebool
0numeric (int, long, )
Giá trị mặc địnhKiểu dữ liệu
85
Lập trình C#.NET
Xây dựng hàm tạo
§ Hàm tạo có tên hàm trùng tên đối tượng, không
có kiểu dữ liệu trả về và phạm vi truy nhập
thường là public.
§ Hàm tạo có thể có tham số hoặc không
public Class_name()
public Class_name( argument list )
§ Ví dụ:
public Time()
public Time(System.Datetime t)
86
Lập trình C#.NET
Xây dựng hàm tạo
public class Time
{
// private variables
int Year;
int Month;
int Date;
int Hour;
int Minute;
int Second;
// contructor
public Time(System.DateTime d)
{
Year = d.Year;
Month = d.Month;
Date = d.Day;
Hour = d.Hour;
Minute = d.Minute;
Second = d.Second;
}
// public methods
public void DisplayCurrentTime()
{
System.Console.WriteLine("{0}/{1}/{2}
{3}:{4}:{5}", Date, Month, Year, Hour,
Minute, Second);
}
}
87
Lập trình C#.NET
Kiểm tra hàm tạo
public class Tester
{
static void Main()
{
System.DateTime currentDate = System.DateTime.Now;
Time t = new Time(currentDate);
t.DisplayCurrentTime();
}
}
88
Lập trình C#.NET
Hàm tạo sao chép (copy constructor)
§ Để hỗ trợ chức năng hàm tạo sao chép.NET định nghĩa
một interface ICloneable
§ Class hỗ trợ hàm tạo sao chép phải
• implement interface ICloneable
public Object Clone()
{
return MemberwiseClone(); // shallow copy
}
• Tự xây dựng hàm tạo sao chép (hand-copying copy
constructor)
89
Lập trình C#.NET
Tự xây dựng hàm tạo
//hand-copying contructor
public Time(Time previousTime)
{
Year = previousTime.Year;
Month = previousTime.Month;
Date = previousTime.Date;
Hour = previousTime.Hour;
Minute = previousTime.Minute;
Second = previousTime.Second;
}
90
Lập trình C#.NET
Gọi hàm tạo sao chép
public class Tester
{
static void Main()
{
System.DateTime currentDate = System.DateTime.Now;
Time t = new Time(currentDate);
Time t2 = (Time)t.Clone();
t2.DisplayCurrentTime();
Time t3 = new Time(t2);
t3.DisplayCurrentTime();
}
}
91
Lập trình C#.NET
Từ khóa this
§ Từ khóa this trỏ đến thể hiện hiện tại (current
instance) của đối tượng
§ Từ khóa this rất hữu ích trong một số trường
hợp
1) Chỉ rõ thành phần (thuộc tính) của đối tượng,
tránh nhầm lẫn với tên biến, tránh sự nhập nhằng
về tên
public void SomeMethod (int hour)
{
this.hour = hour;
}
92
Lập trình C#.NET
Từ khóa this (tiếp)
2)Dùng làm tham số truyền vào cho một phương
thức của đối tượng khác, cho phép phương thức
đó có thể tác động đến các thành phần của đối
tượng hiện tại.
class myClass
{
public void Foo(OtherClass otherObject)
{
otherObject.Bar(this);
}
}
93
Lập trình C#.NET
Từ khóa this (tiếp)
3) Sử dụng cùng với indexer (Tìm hiểu sau)
4) Gọi một hàm tạo từ hàm tạo khác của lớp
class myClass
{
public myClass(int i) { //... }
public myClass( ) : this(42) { //... }
}
94
Lập trình C#.NET
Từ khóa this (tiếp)
5) Gọi tường minh các phương thức, thuộc tính
của lớp
public void MyMethod(int y)
{
int x = 0;
x = 7; // assign to a local variable
y = 8; // assign to a parameter
this.z = 5; // assign to a member variable
this.Draw( ); // invoke member method
}
95
Lập trình C#.NET
Sử dụng các thành phần tĩnh (static memebrs)
§ Thành phần tĩnh là các thành phần chung (thuộc
tính, phương thức) của lớp
• Truy xuất các thành phần tĩnh thông qua tên lớp
Class_name.Static_Member
• C# không cho phép truy xuất các thành phần tĩnh
thông qua đối tượng (thể hiện của lớp)
• Các thành phần tĩnh có thể được truy nhập, triệu
gọi trước khi các đối tượng của lớp đó được tạo
ra
• Các phương thức tĩnh không thể truy xuất trực
tiếp các thuộc tính, phương thức không tĩnh (non-
static)
96
Lập trình C#.NET
Ví dụ sử dụng thành phần tĩnh
namespace StaticFields
{
public class Cat
{
private static int instances = 0;
public Cat()
{
instances++;
}
public static void HowManyCats()
{
Console.WriteLine("{0} cats
adopted",instances);
}
}
public class Tester
{
static void Main()
{
Cat.HowManyCats();
Cat frisky = new Cat();
Cat.HowManyCats();
Cat whiskers = new Cat();
Cat.HowManyCats();
}
}
}
97
Lập trình C#.NET
Hủy đối tượng (Destroying Object)
§ C# hỗ trợ cơ chế tự động thu gom rác (garbage
collector) -> người lập trình không phải hủy đối
tượng một cách tường minh.
§ Nếu đối tượng có sử dụng các tài nguyên khác
(files) -> người lập trình phải tự xây dựng hàm
hủy (Destructor)
§ Bộ thu gom rác tự động gọi hàm hủy, các
phương thức không gọi một cách tường minh.
98
Lập trình C#.NET
Xây dựng hàm hủy
§ Về mặt cú pháp, hàm hủy trong C# giống với
C++
~Class_Name( )
~MyClass()
{
// do work here
}
protected override void Finalize()
{
try
{
// do work here.
}
finally
{
base.Finalize( );
}
}
99
Lập trình C#.NET
Truyền tham số cho phương thức
§ Mặc định, tham số truyền cho phương thức là
kiểu tham trị
• Một bản sao của tham số đó được tạo ra
• Bản sao đó sẽ bị hủy khi kết thúc phương thức
• Giá trị của tham số được truyền không thay đổi
sau khi kết thúc phương thức
public int AddValue(int value1, int value2)
{
return value1+value2;
}
100
Lập trình C#.NET
Truyền tham chiếu
§ C# hỗ trợ truyền tham chiếu sử dụng các từ
khóa
• ref: truyền tham chiếu, biến được tham chiếu
phải được khởi gán trước khi truyền
• out: truyền tham chiếu, biến được tham chiếu
không cần khởi gán trước khi truyền
101
Lập trình C#.NET
Truyền tham chiếu sử dụng từ khóa ref
public void GetTime( ref int h, ref int m, ref int s )
{
h = Hour;
m = Minute;
s = Second;
}
System.DateTime currentTime = System.DateTime.Now;
Time t = new Time( currentTime );
int theHour = 0;
int theMinute = 0;
int theSecond = 0;
t.GetTime( ref theHour, ref theMinute, ref theSecond );
Định nghĩa phương thức
Gọi phương thức
102
Lập trình C#.NET
Truyền tham chiếu sử dụng từ khóa out
public void GetTime( out int h, out int m, out int s )
{
h = Hour;
m = Minute;
s = Second;
}
System.DateTime currentTime = System.DateTime.Now;
Time t = new Time( currentTime );
int theHour;
int theMinute;
int theSecond;
t.GetTime( out theHour, out theMinute, out theSecond );
Định nghĩa phương thức
Gọi phương thức
103
Lập trình C#.NET
Overloading methods and constructors
§ Khi muốn có nhiều hàm cùng tên (VD: nhiều hàm
tạo (constructor) hay nhiều phương thức với
tham số đầu vào khác nhau) -> sử dụng kỹ thuật
chồng hàm (Overloading)
§ Để phân biệt được hai hàm với nhau, phải căn
cứ vào một trong hai yếu tố
• Khác tên
• Khác số tham số hoặc kiểu dữ liệu của tham số
void myMethod(int p1);
void myMethod(int p1, int p2);
void myMethod(int p1, string s1);
104
Lập trình C#.NET
Đóng gói dữ liệu thành các thuộc tính
§ Đóng gói dữ liệu thành các thuộc tính đem lại hai
lợi ích
• Vẫn đảm bảo một giao diện đơn giản cho các đối
tượng khác giao tiếp.
• Dễ dàng thay đổi mã mà không ảnh hưởng tới
giao diện với các đối tượng khác.
• Tăng tính an toàn dữ liệu, kiểm tra được dữ liệu
khi gán
105
Lập trình C#.NET
Sử dụng các thuộc tính (property)
private int hour;
public int Hour
{
get
{
return hour;
}
set
{
hour = value;
}
}
Lấy về giá trị của
thuộc tính
Thiết lập giá trị của
thuộc tính
106
Lập trình C#.NET
Thuộc tính chỉ đọc (readonly)
public static readonly int Year;
public static readonly int Month;
public static readonly int Date;
public static readonly int Hour;
public static readonly int Minute;
public static readonly int Second;
-> Chỉ có thể gán giá trị sử dụng hàm tạo tĩnh
(static constructor) hoặc khởi gán ngay từ ban
đầu.
107
Lập trình C#.NET
Bài thực hành số 2
108
Lập trình C#.NET
Bài thực hành số 2
109
Lập trình C#.NET
Bài thực hành số 2
110
Lập trình C#.NET
Bài thực hành số 2
111
Lập trình C#.NET
Bài thực hành số 2
112
Lập trình C#.NET
4.3. Kế thừa và đa hình
§ Tổng quát hóa và cá thể hóa (generalization and
specialization)
§ Kế thừa (inheritance)
§ Đa hình (polymorphism)
§ Lớp trừu tượng (abstract class)
113
Lập trình C#.NET
Tổng quát hóa và cá thể hóa
Cá
thể
hóa
Tổng
quát
hóa
§Tổng quát hóa: các lớp đối tượng có những thuộc tính,
phương thức chung được tổng quát thành các lớp cha
§Cá thể hóa: các lớp con kế thừa các phương thức, thuộc
tính của lớp cha và bổ sung thêm thuộc tính, phương thức
của riêng nó
114
Lập trình C#.NET
Kế thừa (inheritance)
§ Kế thừa (inheritance) là kỹ thuật thể hiện quan
hệ cá thể hóa (specialization)
public class ListBox : Control
public class Button : Control
115
Lập trình C#.NET
Kế thừa (Inheritance)
§ Ưu điểm của kỹ thuật kế thừa
• Khả năng tái sử dụng mã. VD: lớp ListBox có thể
sử dụng một số phương thức, thuộc tính của lớp
Control
• Khả năng sử dụng kỹ thuật đa hình
(Polymorphism). VD: lớp Control có phương thức
Draw(), lớp Listbox và Button cũng có phương
thức Draw().
116
Lập trình C#.NET
Tạo phương thức hỗ trợ đa hình
public virtual void Draw( )
{
//Code statements
}
public override void Draw( )
{
//Code statements
}
117
Lập trình C#.NET
VÍ DỤ
Kỹ thuật kế thừa và đa hình
118
Lập trình C#.NET
Lớp trừu tượng (abstract class)
§ Sử dụng lớp trừu tượng khi
• Yêu cầu tất cả các lớp con, kế thừa từ nó phải cài
đặt một hoặc một vài phương thức nào đó.
§ Đặc điểm của lớp trừu tượng
• Lớp trừu tượng là lớp tồn tại ít nhất một phương
thức trừu tượng
• Không thể tạo đối tượng của lớp trừu tượng
119
Lập trình C#.NET
Khai báo lớp trừu tượng
abstract public class Control
{
protected int top;
protected int left;
// constructor
public Control( int top, int left )
{
this.top = top;
this.left = left;
}
abstract public void DrawWindow( );
}
Khai báo lớp
trừu tượng
Khai báo
phương thức
trừu tượng
120
Lập trình C#.NET
Kế thừa lớp trừu tượng
public class Button : Control
{
public Button(int top,int left ):base(top, left)
{
}
// implement the abstract method
public override void DrawWindow( )
{
Console.WriteLine( "Drawing a button at {0},
{1}\n",top, left );
}
}
121
Lập trình C#.NET
VÍ DỤ
Lớp trừu tượng
122
Lập trình C#.NET
Root class: Object
§ Trong C#, tất cả các lớp, thậm chí các kiểu dữ
liệu có sẵn đều dẫn xuất, kế thừa từ lớp Object.
Object là lớp cao nhất trong cây kế thừa của C#
§ Lớp Object cung cấp một số các phương thức
ảo mà các lớp con có thể cài đặt và thực thi
• Equals()
• GetType()
• ToString()
123
Lập trình C#.NET
Boxing and Unboxing
§ Boxing và Unboxing là quá trình cho phép kiểu
giá trị (ví dụ: integer) có thể được xử lý như là
kiểu tham chiếu (objects)
• Quá trình Boxing diễn ra ngầm định (implicity):
chuyển đổi ngầm định kiểu giá trị sang kiểu
Object
• Quá trình Unboxing diễn ra tường minh
(explicity):chuyển ngược từ kiểu Object về kiểu
giá trị.
124
Lập trình C#.NET
Boxing
using System;
class Boxing
{
public static void Main( )
{
int i = 123;
Console.WriteLine
("The object value = {0}", i);
}
}
125
Lập trình C#.NET
Unboxing
public class UnboxingTest
{
public static void Main( )
{
int i = 123;
//Boxing
object o = i;
// unboxing (must be explicit)
int j = ( int ) o;
Console.WriteLine( "j: {0}", j );
}
}
126
Lập trình C#.NET
Bài thực hành số 3
Bài 1: Xây dựng các lớp Fish, GoldFish và Shark
theo thiết kế dưới đây
127
Lập trình C#.NET
4.4. Hàm chồng toán tử
§ Mục đích của hàm chồng toán tử (Overloading
Operator)
• Cho phép các lớp do người dùng định nghĩa có
thể có thể có đầy đủ các chức năng như các kiểu
do ngôn ngữ định nghĩa
• VD: 1 lớp phân số, có thể có đầy đủ các phép
toán
üCộng
üTrừ
üNhân
üChia
128
Lập trình C#.NET
Hàm chồng toán tử
Fraction theSum = firstFraction.Add(secondFraction);
Fraction theSum = firstFraction + secondFraction;
129
Lập trình C#.NET
Sử dụng từ khóa operator
Khai báo
public static Fraction operator+ (Fraction lhs, Fraction rhs)
Fraction theSum = firstFraction + secondFraction;
Fraction.operator+(firstFraction, secondFraction)
Sử dụng
130
Lập trình C#.NET
Bài thực hành số 3
Bài 2: Xây dựng lớp phân số (Fraction) theo thiết
kế dưới đây. Sử dụng kỹ thuật chồng toán tử
(Overloading Operator) để xây dựng các toán tử +,
-, *, /, ==, !=
131
Lập trình C#.NET
4.5.Cấu trúc struct
§ Struct là cấu trúc đơn giản do người dùng tự
định nghĩa, khá giống với class
• Có hàm tạo, thuộc tính, phương thức, toán tử,
index
§ Struct khác class
• Struct không hỗ trợ hàm hủy và cơ chế kế thừa
• Struct là kiểu giá trị, không phải kiểu tham chiếu
• Trong struct, các thuộc tính không được khởi gán
dữ liệu khi khai báo
132
Lập trình C#.NET
Định nghĩa struct
[attributes] [access-modifiers] struct identifier [:interface-list]
{ struct-members }
public struct Location
{
private int xVal;
private int yVal;
public Location(int x, int y)
{
xVal = x;
yVal = y;
}
public override string ToString( )
{
return ( String.Format( "{0}, {1}", xVal,
yVal ) );
}
public int x
{
get
{
return xVal;
}
set
{
xVal = value;
}
}
}
133
Lập trình C#.NET
Tạo struct
§ Sử dụng từ khóa new
Location loc1 = new Location(200,300);
§ Không sử dụng từ khóa new (Các thuộc tính
xVal và yVal phải chuyển phạm vi truy nhập
thành public)
Location loc1; // Không gọi tới hàm tạo
loc1.xVal = 75; // Khởi gán các thuộc tính
loc1.yVal = 225;
134
Lập trình C#.NET
Interfaces
§ Một lớp hay struct thực thi (implement) interface
-> đảm bảo hỗ trợ đầy đủ các thuộc tính,
phương thức, sự kiện và index được định nghĩa
trong interface đó
§ Interface thường được so sánh với lớp trừu
tượng (abstract class)
§ Khi một lớp hay cấu trúc thực thi một interface,
nó phải thực thi tất cả các thành phần của
interface (thuộc tính, phương thức, sự kiện)
135
Lập trình C#.NET
Định nghĩa Interface
[attributes] [access-modifier] interface
interface-name[:base-list] {interface-body}
•Phạm vi truy nhập: public, private, protected, internal,
protected internal
•Interface-name: tên của interface, nên bắt đầu bằng chữ “I”
Ví dụ: ICloneable, IRunable
•Base-list: danh sách các interface mà nó mở rộng (extend)
•Interface-body: mô tả các phương thức, các thuộc tính,
mà lớp thực thi cần cài đặt (Không xác định phạm vi truy
cập – mặc định là public)
136
Lập trình C#.NET
Ví dụ
interface IStorable
{
// no access modifiers,
// methods are public
// no implementation
void Read();
void Write(object obj);
int Status { get; set; }
}
public class Document : IStorable
{
// store the value for the property
private int status = 0;
public Document(string s)
{//code}
public void Read()
{//code}
// implement the Write method
public void Write(object o)
{//code}
// implement the property
public int Status
{
get
{ return status; }
set
{ status = value;}
}
}
137
Lập trình C#.NET
Thực thi nhiều interfaces
§ Các lớp và cấu trúc có thể implement nhiều
interfaces khác nhau
Ví dụ: lớp tài liệu (Document) vừa có khả năng
lưu trữ (storable), vừa có khả năng nén
(compressible)
public class Document : IStorable, ICompressible
138
Lập trình C#.NET
Mở rộng Interfaces (extending)
§ Có thể mở rộng interface để thêm các thuộc tính
và phương thức mới
interface ILoggedCompressible : ICompressible
{
void LogSavedBytes();
}
139
Lập trình C#.NET
Kết hợp interfaces
§ Có thể kết hợp các interfaces lại với nhau và
thêm các phương thức, thuộc tính nếu cần
interface IStorableCompressible : IStorable,
ILoggedCompressible
{
void LogOriginalSize();
}
140
Lập trình C#.NET
Truy nhập các thành phần của interface
§ Không thể trực tiếp tạo thể hiện của interface
IStorable isDoc = new IStorable();
§ Truy xuất thành phần của Interface theo hai
bước (hoặc gộp cả hai bước)
• Tạo đối tượng của một lớp implement interface
Document doc = new Document("Test Document");
• Ép kiểu đối tượng này thành thể hiện của
interface
IStorable isDoc = doc;
141
Lập trình C#.NET
Casting to an interface
§ Không biết rõ một lớp implement những interface
nào -> khi ép kiểu sang interface có thể phát sinh
lỗi
§ C# hỗ trợ 2 toán tử sử dụng cho việc casting và
kiểm tra
• Toán tử is
expression is type
• Toán tử as
expression as type
142
Lập trình C#.NET
So sánh interface và lớp trừu tượng
§ Interface khá giống với lớp trừu tượng
§ C# sử dụng interface để thực thi kỹ thuật đa kế thừa vì
C# không hỗ trợ đa kế thừa từ nhiều lớp
(C++ có hỗ trợ đa kế thừa)
public class StorableList : List, IStorable
{
// List methods here ...
public void Read( ) {...}
public void Write(object obj) {...}
// ...
}
143
Lập trình C#.NET
Overriding Interface Implementations
§ Một lớp khi thực thi các phương thức của
interface có thể chuyển đổi phương thức đó
thành dạng phương thức ảo
§ Các lớp dẫn xuất từ lớp đó override phương
thức ảo -> KỸ THUẬT ĐA HÌNH
144
Lập trình C#.NET
Bài thực hành số 4
Xây dựng các lớp phương tiện giao thông dưới
đây theo thiết kế
145
Lập trình C#.NET
4.7. Mảng, chỉ số và tập hợp
§ Mảng là một tập hợp được đánh chỉ số (indexed
Collection) các đối tượng cùng kiểu
§ Biến mảng là đối tượng, các đối tượng mảng
được khai báo thực tế là thể hiện của lớp
System.Array
• Đối tượng mảng có thuộc tính: IsReadOnly,
Length
• Đối tượng mảng có phương thức: Clear(), Copy(),
Sort()
146
Lập trình C#.NET
Khai báo mảng
type[ ] array-name;
§ Cặp ngoặc vuông [ ] báo cho trình dịch C# biết là
chúng ta khai báo một mảng
§ Type xác định kiểu dữ liệu của các phần tử trong
mảng
Ví dụ:
int[ ] myIntArray; //Mảng integer
Employer[ ] myObjectArray; //Mảng đối tượng
147
Lập trình C#.NET
Giá trị mặc định khi khởi gán mảng
§ Khi khởi gản mảng các phần tử kiểu giá trị (value
type), các phần tử được khởi gán giá trị mặc
định của nó
myIntArray=new int[5];
§ Khi khởi gán mảng các phần tử kiểu tham chiếu
(reference type), các phần tử mảng được khởi
gán giá trị null -> muốn sử dụng phải tạo và gán
các đối tượng cụ thể cho các phần tử của mảng
myObjectArray=new Employer[5];
148
Lập trình C#.NET
Truy nhập phần tử mảng
§ Các phần tử mảng trong C# được đánh chỉ số,
bắt đầu bằng 0
§ Mảng là đối tượng, có thuộc tính Length cho biết
số phần tử trong mảng
-> Các phần tử của mảng được đánh chỉ số từ 0
đến Length -1
§ Truy nhập phần tử mảng (VD phần tử thứ 3 của
mảng myInt) thông qua toán tử chỉ số [ ]
myInt[2]
149
Lập trình C#.NET
Ví dụ
public class Employee
{
private int empID;
public Employee(int empID)
{
this.empID = empID;
}
public override string ToString()
{
return empID.ToString();
}
}
public class Tester
{
static void Main()
{
Employee[] empArray;
empArray = new Employee[3];
// populate the array
for (int i = 0; i < empArray.Length; i++)
{
empArray[i] = new Employee(i + 5);
}
for (int i = 0; i < empArray.Length; i++)
{
Console.WriteLine(empArray[i].ToStrin
g());
}
}
}
150
Lập trình C#.NET
Câu lệnh foreach
§ Câu lệnh foreach cho phép lặp qua tất cả các
phần tử trong trong một mảng hay kiểu tập hợp
bất kỳ nào khác
foreach (type identifier in expression) statement
Kiểu dữ liệu
của phần tử
trong mảng /
tập hợp
Tên biến lặp
(tham chiếu đến
phần tử mảng tại
mỗi vòng lặp)
Tên mảng/ Tập
hợp
151
Lập trình C#.NET
Ví dụ
Khi các phần tử mảng là kiểu giá trị
foreach ( int i in intArray )
{
Console.WriteLine( i.ToString( ) );
}
Khi các phần tử mảng là kiểu tham chiếu
foreach ( Employee e in empArray )
{
Console.WriteLine( e.ToString( ) );
}
152
Lập trình C#.NET
Từ khóa params
§ Từ khóa params cho phép truyền một loạt các tham
số cho phương thức mà không phải định nghĩa
mảng một cách tường minh.
public void DisplayVals(params int[] intVals)
153
Lập trình C#.NET
Ứng dụng từ khóa params
public class Tester
{
static void Main()
{
Tester t = new Tester();
t.DisplayVals(5, 6, 7, 8);
int[] explicitArray = new int[5] { 1, 2, 3, 4, 5 };
t.DisplayVals(explicitArray);
}
public void DisplayVals(params int[] intVals)
{
foreach (int i in intVals)
{
Console.WriteLine("DisplayVals {0}", i);
}
}
}
154
Lập trình C#.NET
Bài thực hành số 5
Bài 1: Viết một phương thức FindMinMax in ra giá
trị số nguyên lớn nhất và nhỏ nhất trong số các
tham số đầu vào là một dãy các số nguyên bất kỳ
VD: Gọi hàm FindMinMax(3,1,5,8,0,9,-2)
Kết quả in ra màn hình
- Số nguyên nhỏ nhât là: -2
- Số nguyên lớn nhất là: 9
155
Lập trình C#.NET
4.8. Strings
public sealed class String :
IComparable, ICloneable, IConvertible, IEnumerable
§ String là lớp đóng -> Không thể tạo lớp kế thừa lớp String
§ String implement 4 interfaces IComparable, ICloneable,
IConvertible và IEnumerable cho phép có thể so sánh, sao
chép, chuyển đổi và sử dụng kiểu liệt kê
§ Mỗi đối tượng của lớp String là một chuỗi cố định các ký
tự Unicode -> các phương thức làm thay đổi đối tượng của
lớp thực chất là tạo ra một bản sao đã được sửa đổi, chuỗi
nguyên gốc vẫn được giữ trong bộ nhớ cho đến khi bộ thu
gom rác xử lý.
156
Lập trình C#.NET
Tạo chuỗi
§Cách thông thường
string literalString = "This is a string literal \n";
§Tạo chuỗi đúng với nguyên mẫu (verbatim string)
sử dụng từ khóa @
string verbatimString=@"\n Pham Van Thuan \t Tel: 0985905253\\";
public class Test
{
public static void Main()
{
String literalString = "Pham Van Thuan \n";
Console.WriteLine(literalString);
String verbatimString = @"\n Pham Van Thuan \t Tel: 0985905253\\";
Console.WriteLine(verbatimString);
Console.Read();
}
}
157
Lập trình C#.NET
Thao tác chuỗi
§ Lớp string hỗ trợ các phương thức cho phép so sánh,
tìm kiếm và xử lý chuỗi
Định dạng một chuỗiFormat()
Kiểm tra hai chuỗi có giống nhau khôngEquals()
Tạo bản sao của một chuỗiCopy()
Phương thức nối chuỗiConcat()
Phương thức so sánh hai chuỗiCompare()
Thuộc tính cho biết chuỗi rỗngEmpty
Mô tảThuộc tính,
phương thức
158
Lập trình C#.NET
Ví dụ
static void Main()
{
string str1 = "Hanoi";
string str2 = "La thu do cua Viet Nam";
string str3 = "HANOI";
//So sanh chuoi, tra ve 0 neu giong nhau
int result = string.Compare(str1, str3);
Console.WriteLine("Ket qua so sanh hai chuoi {0} va {1} la {2}", str1, str3, result);
Console.ReadLine();
//Noi chuoi
string str4 = string.Concat(str1, " ", str2);
string str5 = str1 + " " + str2;
Console.WriteLine("Ket qua noi chuoi {0} va {1}: \n + Su dung phuong thuc
Concat: {2} \n + Su dung ham chong toan tu +: {3}", str1, str2, str4, str5);
Console.ReadLine();
//Lay ve chieu dai chuoi
Console.WriteLine("Chieu dai cua chuoi \"{0}\" la {1}", str2, str2.Length);
Console.ReadLine();
}
159
Lập trình C#.NET
Xử lý chuỗi động (Dynamic string)
§ Lớp System.Text.Stringbuilder được sử dụng để
tạo và chỉnh sửa chuỗi
• Không giống như string, các đối tượng của lớp
Stringbuilder có thể thay đổi
• Khi chỉnh sửa, sự thay đổi được thực hiện trên
chính đối tượng chứ không phải trên bản sao của
đối tượng
160
Lập trình C#.NET
Ví dụ sử dụng Stringbuilder
static void Main()
{
// create some strings to work with
string s1 = "Hi, Good morning";
// array of delimiters to split the sentence with
char[] delimiters = new char[]{' ',','};
// use a StringBuilder class to build the output string
StringBuilder output = new StringBuilder();
int ctr = 1;
// split the string and then iterate over the
// resulting array of strings
foreach (string subString in s1.Split(delimiters))
{
// AppendFormat appends a formatted string
output.AppendFormat("{0}: {1}\n", ctr++, subString);
}
Console.WriteLine(output);
}
161
Lập trình C#.NET
4.9. Handling Exceptions
§ C# xử dụng kỹ thuật bắt ngoại lệ (Handling
Exception để bắt và xử lý lỗi (errror) cũng như
các ngoại lệ phát sinh trong quá trình thực thi
chương trình)
§ Phân loại bug, error và exception
• Bug: lỗi do người lập trình, cần được loại bỏ
trước khi hoàn thành phần mềm
• Error: lỗi phát sinh do người dùng, ví dụ người
dùng nhập sai định dạng dữ liệu -> phải kiểm tra
dữ liệu đầu vào
• Exception: lỗi bất thường, ví dụ như hết bộ nhớ,
lỗi chia cho 0s
162
Lập trình C#.NET
Ném (throwing) và bắt (catching) ngoại lệ
§ Để báo hiệu một điều kiện bất thường xuất hiện
trong quá trình thực thi, thực hiện ném ngoại lệ
throw new System.Exception();
§ Khi một ngoại lệ được tung ra, chương trình
ngay lập tức sẽ dừng lại và CLR sẽ tìm , kiểm tra
chương trình bắt ngoại lệ, nếu không tìm thấy nó
sẽ kết thúc chương trình
163
Lập trình C#.NET
Ngoại lệ được báo trong chế độ debug
164
Lập trình C#.NET
Lỗi dừng chương trình khi chạy thực tế
165
Lập trình C#.NET
Ví dụ
public class Test
{
public static void Main()
{
Console.WriteLine("Enter Main...");
Test t = new Test();
t.Func1();
Console.WriteLine("Exit Main...");
}
public void Func1()
{
Console.WriteLine("Enter Func1...");
Func2();
Console.WriteLine("Exit Func1...");
}
public void Func2()
{
Console.WriteLine("Enter Func2...");
throw new System.Exception();
Console.WriteLine("Exit Func2...");
}
}
166
Lập trình C#.NET
Ngoại lệ xuất hiện
167
Lập trình C#.NET
Chi tiết ngoại lệ
168
Lập trình C#.NET
Câu lệnh trycatch
§ C# sử dụng cấu trúc trycatchfinally để kiểm
tra, bắt và xử lý ngoại lệ
try
{
//Lệnh có thể phát sinh ngoại lệ, cần kiểm tra
}
catch(Exception e)
{
//Bắt và xử lý ngoại lệ nếu có
}
Finally
{
//Đoạn mã luôn thực thi khi xuất hiện ngoại lệ
}
169
Lập trình C#.NET
Câu lệnh trycatch
§ Có thể có nhiều đoạn lệnh catch trong một câu
lệnh trycatch tương ứng với nhiều ngoại lệ
khác nhau
§ Đoạn lệnh trycatch có thể đặt trong phương
thức có thể phát sinh ngoại lệ hoặc đặt ở cấp
cao hơn, phương thức triệu gọi đoạn mã có thể
phát sinh ngoại lệ
170
Lập trình C#.NET
Bài thực hành số 5
Bài 2: Viết một phương thức
float Divide(int num1, int num2)
§ Kiểm tra và bắt ngoại lệ bằng câu lệnh
trycatch trong hai trường hợp
• Bắt trong thân hàm
• Bắt trong lời gọi hàm
171
Lập trình C#.NET
Nội dung môn học
Chương 1: Giới thiệu C# và .NET Framework
Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio .NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
172
Lập trình C#.NET
Nội dung chương 5
5.1. Mở đầu về lập trình Windows Form
5.2. Một số điều khiển thông dụng cho Windows
Form
5.3. Kết nối cơ sở dữ liệu sử dụng ADO.NET
5.4. Lập báo cáo sử dụng Crystal Report.NET
5.5. Lập trình Socket
173
Lập trình C#.NET
5.1. Mở đầu về lập trình Windows Form
Xây dựng ứng dụng Hello World
174
Lập trình C#.NET
Xây dựng ứng dụng Hello World
§ Tạo dự án kiểu Windows Application
§ Thiết kế giao diện
• 1 label
• 1 textbox
• 2 button: Hello, Good bye
175
Lập trình C#.NET
Các file cấu thành
class frmHello
§Form1.cs: chứa mã
chương trình của
người dùng
§Form1.Designer.cs:
do bộ VS 2005 tự động
sinh trong quá trình
thiết kế
176
Lập trình C#.NET
Form1.cs
177
Lập trình C#.NET
Form1.Designer.cs
178
Lập trình C#.NET
Viết mã
§ Sự kiện người dùng click vào nút Hello
private void btnHello_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello "+txtName.Text);
}
Phương thức Show của đối tượng MessageBox
-Hiển thị thông báo
-Hiển thị các nút bấm tùy chọn, tương tác người dùng
(OK, Cancel, Yes, No)
179
Lập trình C#.NET
Viết mã (tiếp)
§ Sự kiện người dùng click vào nút Good bye
private void btnGoodBye_Click(object sender, EventArgs e)
{
MessageBox.Show("Bye bye!");
Application.Exit();
}
Lớp Application cung cấp các thuộc tính và phương thức
tĩnh để làm việc với ứng dụng
Application.Exit(); //Đóng ứng dụng
180
Lập trình C#.NET
5.2. Một số điều khiển thông dụng
trong Windows Form
§ Label và Linklabel
§ Textbox và RichTextBox
§ Button
§ Check box và Radio button
§ Combobox
§ Listbox
181
Lập trình C#.NET
Label
§ Điều khiển label chứa văn bản tĩnh trên form
§ Một số thuộc tính thường dùng
• Text
• Text align
§ C# hỗ trợ điều khiển Linklabel (kế thừa lớp
Label) cho phép link đến các liên kết (website,
forum). Một số thuộc tính thường dùng
• Text
• LinkArea
• LinkBehavior
182
Lập trình C#.NET
Textbox
§ Điều khiển Textbox cho phép người dùng nhập
thông tin hoặc hiển thị các thông tin dưới dạng
văn bản
• Một dòng
• Nhiều dòng
183
Lập trình C#.NET
RichTextBox
§ Cho phép khả năng định dạng, chỉnh sửa mạnh
hơn nhiều so với điều khiển textbox
184
Lập trình C#.NET
Check box và Radio button
§ Check box: thiết lập trạng thái của check box qua
thuộc tính CheckState
• CheckState=Checked
• CheckState=Unchecked
• CheckState=Indeterminate
§ Radio button: chọn duy nhất một trong nhiều tùy
chọn khác nhau
185
Lập trình C#.NET
List Control
§ List controls bao gồm ba điều khiển cơ bản:
Listbox, CheckedListBox và ComboBox
• Có thể đưa dữ liệu vào bằng lệnh Add
• Gắn điều khiển với một nguồn dữ liệu sẵn có
(Data binding)
§ Các điều khiển này đều kế thừa từ lớp trừu
tượng ListControl
186
Lập trình C#.NET
Bài thực hành số 6
187
Lập trình C#.NET
5.3. Kết nối cơ sở dữ liệu sử dụng ADO.NET
§ Mô hình dữ liệu quan hệ
§ Một số câu truy vấn cơ bản
§ Kết nối cơ sở dữ liệu sử dụng ADO.NET
188
Lập trình C#.NET
§ Cơ sở dữ liệu:
Là sự lưu trữ dữ liệu có tổ chức.
§ Hệ quản lý cơ sở dữ liệu (DBMS):
• Cung cấp cơ chế lưu trữ, quản lý dữ liệu một
cách phù hợp với định dạng dữ liệu.
• Cho phép lưu trữ và truy cập tới cơ sở dữ liệu
mà không cần biết về những khai báo bên trong
cơ sở dữ liệu.
• Ví dụ như SQL Server, Microsoft Access là
các hệ quản lý cơ sở dữ liệu.
Cơ sở dữ liệu quan hệ
189
Lập trình C#.NET
Mô hình Cơ sở dữ liệu quan hệ
§ Biểu diễn dữ liệu một cách logic
• Có thể xem xét các mối quan hệ mà không cần quan
tâm đến cấu trúc vật lý của dữ liệu
§ Bao gồm các bảng
• Các hàng được gọi là các mẩu tin (records)
• Các cột được gọi là các trường ( fields)
• Khoá chính (Primary key) một hàng phải có khóa
chính nhằm phân biệt nó với các hàng khác. Do đó
khóa chính phải có giá trị duy nhất và không có giá trị
null
190
Lập trình C#.NET
§ Khóa ngoại (foreign key): trong trường hợp một
nhân viên mua nhiều hàng hóa thì trên bảng
Order, ngoài khóa chính (thường là số hiệu hàng
hóa) còn lặp lại số thẻ nhân viên (trong bảng
Employee). Lúc này số thẻ nhân viên gọi là khóa
ngoại của bảng Order. Khóa ngoại dùng để tìm
kiếm các giá trị trong bảng con (bảng Order).
Mô hình Cơ sở dữ liệu quan hệ
191
Lập trình C#.NET
Ta có cơ sở dữ liệu của bảng Employee và
bảng Product như sau:
khóa chính của
bảng Employee
khóa chính của
bảng Product
khóa ngoại của
bảng Product
Mô hình Cơ sở dữ liệu quan hệ
192
Lập trình C#.NET
Quan hệ (relationship): được thiết lập giữa hai bảng dữ liệu với
nhau, có ba loại quan hệ chính.
• Quan hệ 1-1: quan hệ trực tiếp giữa 2 bảng dữ liệu. Ví dụ
bạn có 2 bảng Person1, Person2 thì quan hệ Kết hôn là
quan hệ 1-1. Một cách khác khi mà 2 bảng có quan hệ
thông qua 2 khóa chính thì quan hệ là 1-1.
• Quan hệ 1-N: ứng với một hàng trong bảng này có nhiều
hàng trong bảng khác. Chẳng hạn như quan hệ giữa 2
bảng Employee và Order như vừa rồi là quan hệ 1-N.
• Quan hệ N-N: được thiết lập khi một hàng trong Parent
table có nhiều hàng trong Child table và ngược lại.
Mô hình Cơ sở dữ liệu quan hệ
193
Lập trình C#.NET
§ Tính toàn vẹn dữ liệu (Data Integrity), được định nghĩa
là không tồn tại dữ liệu dư thừa, bao gồm:
• Dữ liệu nhập (Entity Integrity): mọi hàng phải có một giá trị
duy nhất trong trường khóa chính của nó.
• Ràng buộc toàn vẹn (Referential Integrity): mọi giá trị
trường khóa ngoại của bảng này phải xuất hiện trong
trường khóa chính của bảng khác.
• Toàn vẹn miền (Domain Integrity): dữ liệu nhập vào trong
cột phải phù hợp với định dạng và kiểu dữ liệu đã khai
báo.
Mô hình Cơ sở dữ liệu quan hệ
194
Lập trình C#.NET
Ví dụ
tblUsers
tblMemos tblMeetings
195
Lập trình C#.NET
Ví dụ
196
Lập trình C#.NET
SQL-Ngôn ngữ truy vấn có cấu trúc
§ Được dùng để yêu cầu dữ liệu (thực hiện
truy vấn ) và thao tác trên dữ liệu đó
§ Để thực hiện các lệnh SQL, bạn sử dụng
SQL Query Analyzer. Có thể mở trực tiếp
từ cửa sổ SQL Server Enterprise Manager
bằng cách chọn Tools\SQL Query
Analyzer như sau
197
Lập trình C#.NET
SQL-Ngôn ngữ truy vấn có cấu trúc
198
Lập trình C#.NET
Truy vấn SELECT
§ Chức năng:
Trích thông tin từ một hay nhiều bảng trong một
CSDL.
§ Cú pháp:
SELECT danh_sách_các_cột FROM tên_bảng
(Dấu * cho phép trích mẩu tin với tất cả các cột
trong bảng.)
199
Lập trình C#.NET
Mệnh đề WHERE
§ Chức năng:
Truy xuất dữ liệu trong bảng theo các điều kiện nào đó.
§ Cú pháp:
SELECT tên_cột FROM tên_bảng
WHERE tên_cột phép_toán giá_trị
Phép toán Mô tả
= So sánh bằng
So sánh không bằng
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
BETWEEN Nằm giữa một khoảng
LIKE So sánh mẫu chuỗi
200
Lập trình C#.NET
§ Chức năng:
Sắp xếp kết quả trả về theo một tiêu chuẩn bất kỳ.
§ Ví dụ:
Ta có bảng Orders sau:
Lệnh SELECT Company, OrderNumber FROM Orders
ORDER BY Company
cho kết quả
Mệnh đề ORDER BY
201
Lập trình C#.NET
§ Ta cũng có thể sắp xếp theo thứ tự giảm
dần của OrderNumber bằng cách đánh lệnh:
SELECT Company, OrderNumber FROM
Orders
ORDER BY OrderNumber DESC
Kết quả trả về:
Ngược lại, ASC sắp xếp theo thứ tự tăng dần.
Mệnh đề ORDER BY
202
Lập trình C#.NET
Truy vấn thêm mới INSERT
§ Chức năng:
Chèn một hàng vào trong bảng.
§ Cú pháp:
INSERT INTO tên_bảng
VALUES (giá_trị_1, giá_trị_2,....)
Ta cũng có thể chỉ rõ các cột/trường nào cần
chèn dữ liệu:
INSERT INTO tên_bảng (cột_1, cột_2,...)
VALUES (giá_trị_1, giá_trị_2,....)
203
Lập trình C#.NET
Truy vấn thêm mới INSERT
Ví dụ: Ta có bảng Persons như sau:
Câu lệnh SQL sau:
INSERT INTO Persons (LastName, Address)
VALUES ('Rasmussen', 'Storgt 67')
sẽ tạo ra kết quả trong bảng Persons :
204
Lập trình C#.NET
Truy vấn cập nhật UPDATE
§ Chức năng:
Cập nhật hay sửa đổi dữ liệu đã có trong
bảng.
§ Cú pháp:
UPDATE tên_bảng
SET tên_cột = giá_trị_mới
WHERE tên_cột = giá_trị
205
Lập trình C#.NET
Truy vấn cập nhật UPDATE
Ví dụ ta có bảng Person sau:
Để bổ xung thêm phần tên cho người có họ là Rasmussen
ta đánh lệnh sau:
UPDATE Person SET FirstName = 'Nina'
WHERE LastName = 'Rasmussen‘
Kết quả trả về:
206
Lập trình C#.NET
Truy vấn xóa DELETE
§ Chức năng:
Xoá các dòng ra khỏi bảng.
§ Cú pháp:
DELETE FROM tên_bảng
WHERE tên_cột = giá_trị
§ Ví dụ xoá người có tên Nina Rasmussen:
DELETE FROM Person WHERE LastName = 'Rasmussen'
207
Lập trình C#.NET
ADO.NET
§ ADO (Active Data Object) đang là một đối tượng
phổ biến trong lập trình cơ sở dữ liệu, bạn sử
dụng ADO kết nối với bất kỳ cơ sở dữ liệu tương
thích. Nó cung cấp hệ giao tiếp lập trình ứng
dụng API (application program interface) để truy
nhập vào cơ sở dữ liệu hệ thống.
§ ADO.NET là đối tượng được sử dụng trong .NET
208
Lập trình C#.NET
Lớp Connection
§ .NET Data Provider là một phần của mô hình lập trình
ADO.NET, bao gồm 4 lớp sau:
• Connection: lớp kết nối cơ sở dữ liệu.
• DataAdapter: lớp chứa dữ liệu.
• Command: lớp chứa lệnh.
• DataReader: lớp đọc dữ liệu.
§ Bạn cần khai báo Connection khi muốn truy cập loại dữ liệu
nguồn. Có 3 loại kết nối Microsoft cung cấp trong .Net
Framework bao gồm OdbcConnection, OleDbConnection
,SqlConnection.
§ SqlConnection tối ưu hóa cho quá trình kết nối với CSDL
SQL Server 7.0 và phiên bản mới hơn. Trong khi Odbc và
OleDb được sử dụng cho MS Access hay MySQL,
209
Lập trình C#.NET
Lớp DataAdapter
§ Lớp DataAdapter dùng để nhận dữ liệu từ dữ liệu
nguồn, sau đó chuyển vào DataSet và các lớp quan hệ
như DataTable (xem về lớp không kết nối ở phần sau).
Nó cũng có trách nhiệm cập nhật dữ liệu thay đổi vào
dữ liệu nguồn.
§ Các phát biểu trong SQL được “nhúng” vào C# bằng
đối tượng Command. Bộ điều hợp sẽ sử dụng đối
tượng Command để truy vấn và cập nhật dữ liệu. Vì
thế để làm việc được với DataAdapter, bạn phải chỉ rõ
và sử dụng đối tượng Command.
§ DataAdapter chia thành 3 lớp cụ thể:
OleDbDataAdapter , OdbcDataAdapter,
SqlDataAdapter
210
Lập trình C#.NET
5.4. Lập báo cáo sử dụng Crystal Report
§ Sử dụng nguồn dữ liệu qua ODBC
§ Sử dụng nguồn dữ liệu qua ADO.NET
211
Lập trình C#.NET
5.5. Lập trình socket
§ Socket là gì?
Địa chỉ IP
(IP Address)
Số hiệu cổng
(Port Number)
Socket
212
Lập trình C#.NET
Một số port thông dụng
POP3110
HTTP80
SMTP25
FTP Control21
FTP Data20
Giao thức sử dụngSố hiệu cổng
213
Lập trình C#.NET
Giao thức truyền tin
§ Các gói tin được truyền theo hai giao thức chính
• UDP (User Datagram Protocol): không đảm bảo
được thông tin đến được đích và đúng thứ tự
-> Truyền thông tin cần tốc độ nhanh, không cần
tuyệt đối chính xác (Voice over IP, Game
online)
• TCP (Transmission Control Protocol):đảm bảo
chuyển giao dữ liệu đến nơi nhận một cách đáng
tin cậy và đúng thứ tự. (Web, email, truyền file)
214
Lập trình C#.NET
Ví dụ giao thức UDP
Các file đính kèm theo tài liệu này:
- tailieu.pdf