Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 6Kiến trúc của .NET Framework •FCLFramework 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
Trang 1Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 1
Trang 2Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 2
CHƯƠNG I
Trang 3Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 3
Giới thiệu
• NET Framework là 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, desktop và các thiết bị di động
Trang 4Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 4
Kiến trúc của NET Framework
Trang 5Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 5
Kiến trúc của NET Framework
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
Mã lệnh thực thi trong CLR chia làm 2 loại:
- mã được quản lý
- mã không được quản lý 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
Trang 6Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 6
Kiến trúc của 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.
Trang 7Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 7
Các bước thực hiện của Ct
Code Executed
R U N T I M E
Trang 8Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 8
Các bước thực hiện của Ct
truyền thống
• Các ngôn ngữ trước đây có chương
trình dịch riêng và có môi trường chạy
riêng của nó.
• Trong NET, chương trình dịch dịch mã
nguồn vào một "Intermediate Language
(IL)“ và runtime được thay thế bởi CLR
(Common Language Runtime).
Trang 9Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 9
Các bước thực hiện của các ct NET
MSIL + Metadata
code
Code executed
C ác chương trình NET được dịch 2 lần: lần đầu chậm, lần thứ 2 tương
đối nhanh hơn.
Trang 10Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 10
Các bước thực hiện của các ct NET
• 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 (là tập hợp các thành phần được đóng gói trong file exe hoặc dll) Khối này sẽ chứa các mã lệnh ngôn ngữ trung gian (IL) 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ẽ dùng trình biên dịch JIT (Just-in-Time) 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
Trang 11Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 11
Các bước thực hiện của các ct NET
Trang 12Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 12
Các kiểu dữ liệu cơ sở của CTS
Trang 13Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 13
Chương 2
Gi i thi u Visual Studio.NET ới thiệu Visual Studio.NET ệu Visual Studio.NET
Gi i thi u Visual Studio.NET ới thiệu Visual Studio.NET ệu Visual Studio.NET
Trang 14Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 14
Sử dụng IDE Microsoft Visual Studio 2008
Khởi động Microsoft Visual Studio 2008 File New
Project để tạo mới một project
Trang 15Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 15
• Khi VS.NET khởi động, thì trang Start
Page được hiển thị.
Trang 16Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 16
Chia sẻ IDE [3]
Trang 17Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 17
Design, Split, Source
• Design: chế độ thiết kế giao diện
• Source: Hiển thị mã HTML tự động phát sinh khi
thiết kế
Trang 18Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 18
Trang 19Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 19
ToolBox
• Bao gồm các điều
khiển trên Web form và
Trang 20Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 20
Trang 21Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 21
Trang 22Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 22
Trang 23Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 23
Kỹ thuật IntelliSense
• Thông báo cho người lập trình cú pháp đúng và cho phép hoàn thành tự động 1 câu lệnh
Trang 24Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 24
Sự kiện và đáp ứng sự kiện[1]
bên trong 1ứng dụng, giữa 1 đối tượng và đối tượng bên ngoài thông qua sự kiện và đáp ứng sự kiện
Trang 25Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 25
Trang 26Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 26
Ví dụ xử lý sự kiện
Sự kiện
Đáp ứng sự kiện
Người dùng chọn nút
Design: hiển thị bố cục của trang
Source: Hiển thị mã tự động phát
sinh khi tạo trang Web
Trang 27Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 27
Trang 28Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 28
Nội dung
• Giới thiệu
• Biến và các kiểu dữ liệu
• Các cấu trúc điều khiển: if, switch
• Các cấu trúc lặp; for, while, do while,
foreach
• LIST, File văn bản.
Trang 29Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 29
GIỚI THIỆU VỀ C#
• Là NNLT đơn giản, hiện đại, an toàn và
hướng đối tượng
• Là ngôn ngữ mạnh nhất trong NET
• Thay thế cho C++
• Có cú pháp giống C++, Java
• Sử dụng con trỏ dễ dàng hơn trong C++
Trang 30Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 30
GIỚI THIỆU VỀ C#
- “bài toán” cần giải quyết là một Solution.
- Một solution bao gồm một hoặc nhiều project.
- Một solution, nếu có nhiều project thì nên được tạo ra trong một thư mục riêng để có thể chứa các project trong nó
Trang 31Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 31
Cú pháp đơn giản của 1 Project
Trang 32Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 32
Biến
• Khai báo theo cú pháp:
public
protected private
int string
Trang 33Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 33
Mô tả
Kiểu trong CTS Tên
Trang 34Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 34
Kiểu số thực, Boolean, ký tự
• Kiểu số thực: float, double
• Kiểu Boolean: bool: true|false
• Kiểu ký tự: char
– Biểu diễn 1 ký tự 16-bit (Unicode) Các hằng kiểu ký tự được gán bằng cách đóng trong cặp dấu nháy đơn, ví dụ 'A'
Trang 35Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 35
Kiễu dữ liệu tham chiếu được định nghĩa sẵn
Chuỗi ký tự Unicode System.String
string
Kiểu dữ liệu gốc, mọi kiểu dữ liệu khác trong CTS đều kế thừa từ đây (kể cả các kiểu dữ liệu giá trị)
System.Object
object
Mô tả Kiểu CTS
Tên
Trang 36Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 36
Trang 37Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 37
Các phương thức trên chuỗi
protected void Page_Load(object sender, EventArgs e)
{
string st1 = " Nguyen Anh Trung ";
string st2 = "le Tien Tang";
Trang 38Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 38
Các phương thức trên chuỗi
protected void Page_Load(object sender, EventArgs e)
{ string st1 = "Nguyen Anh Trung ";
Response.Write(string.Format( "Tim chuoi con {0}",
• }
Trang 39Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 39
Các toán tử
checked unchecked Điều khiển Overflow exception
Sizeof(Kiểu) Thông tin về kiểu
new Tạo đối tượng
= += -= *= /= %= &= |= ^= <<= >>= Phép gán
+ Cộng chuỗi
&& || ! Logic
+ - * / %
Số học
Ký hiệu Loại toán tử
Trang 40Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 40
Luồng điều khiển của chương trình
Trang 41Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 41
Trang 42Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 42
Trang 43Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 43
Response Write (i);
//Error statement
Response Write(s );
}
Trang 44Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 44
Trang 45Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 45
Trang 46Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 46
ArrayList, LIST
• Là mảng động, mỗi phần tử là một object
• Namespace: System.Collections.Generic
• Khai báo:
ArrayList <tenmang> = new ArrayList();
List <Tenmang>=new List()
List<Kiểu> <Tenmang>=new List<Kiểu> ()
Trang 47Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 47
Các phương thức trên ArrayList,
List
• Add(object): Chèn thêm 1 phần tử vào cuối
mảng
• Clear(): Xoá tất cả các phần tử
• Contains(object): Tìm object trong mảng
• IndexOf(object): Tìm chỉ số của object trong
mảng (-1)
• RemoveAt(index): Xoá phần tử thứ index
• Thuộc tính: count: cho biết số phần tử trong
mảng
• …
Trang 48Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 48
Thao tác trên File
• Namespace: System.IO;
• Các đối tượng thao tác trên File: Stream,
StreamReader, StreamWriter, FileStream
• Thao tác trên file văn bản: StreamReader,
StreamWriter
• Mở file văn bản để đọc:
StreamReader <tênbiến> = new StreamReader(“dd"[,Encoding]);
• Mở file văn bản để ghi:
StreamWriter <tênbiến> = new StreamWriter (“dd“[, bool append] [,Encoding])
Trang 49Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 49
Các phương thức trên StreamReader
• Close(): đóng file
• Peek(): Trả về ký tự tiếp theo, -1;:EOF
• Read(): Đọc ký tự tiếp theo
• ReadBlock(…): Đọc dãy các byte
• ReadLine(): Đọc 1 dòng
• ReadToEnd(): Đọc hết file
• …
Trang 50Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 50
Các phương thức trên StreamWriter
Trang 51Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 51
Trang 53Ví dụ về DataTable
protected void Page_Load(object sender, EventArgs e)
{ DataTable dt = new DataTable("Sach");
// tạo ra 2 cột (field) của bảng Sach
dt.Columns.Add("Masach"); // Tạo ra cột MaSach
dt.Columns.Add("Tensach"); // Tạo ra cột TenSach
DataRow dr = dt.NewRow();//Tạo thêm 1 dòng mới
dr["Masach"] = "s1"; //Nhập dữ liệu cho cột mã sách
dr["TenSach"] = "tin";
dt.Rows.Add(dr); //Thêm dòng vào dt
dr = dt.NewRow(); //Tạo thêm 1 dòng mới
Trang 54Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 54
Trang 55Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 55
Trang 56Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 56
Trang 57Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 57
protected
internal
Biến hoặc phương thức chỉ có thể truy xuất từ bên trong kiểu dữ liệu mà nó thuộc về, hoặc các kiểu dữ liệu dẫn xuất
Trang 58Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 58
Class_b t2 = new Class_b();
Class_b.Class_b1 t21 = new Class_b.Class_b1();
Class_b.Class_b2 t22= new Class_b.Class_b2();
}
}
Trang 59Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 59
Hàm dựng (Constructors)
• Là một loại đặc biệt của phương thức trong một lớp
• Được gọi khi một lớp được tạo
• Thường được sử dụng để khởi tạo các giá trị trong một lớp
• Tên trùng với tên lớp
• Không trả về giá trị
• Nếu không tạo ra hàm dựng C# sẽ tạo ra hàm dựng ngầm định
• Một lớp có thể có nhiều hàm dựng nhưng khác nhau
về số lượng hoặc kiểu của tham số
Trang 60Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 60
using System;
public class Person
{
public string Ten,dc=“Khong co” ;
Trang 61Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 61
Trang 62Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 62
Destructor
• Destructors trong C# gọi là bộ thu gom rác
Garbage Collectors.
• Bộ thu gom rác sẽ giải phóng bộ nhớ khi
đối tượng không còn yêu cầu hoặc tham
chiếu.
• Destructors khai báo như sau:
~<tên hàm huỷ>()//giống tên lớp
{
//các cài đặt của người lập trình }
Trang 63Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 63
Các trường (Fields)
• Lưu trữ giá trị
• Cú pháp: <Mứctruycập> <Kiểu> <tênfields>
• Mức truy cập: public, private, protected,
internal, protected internal
• Kiểu:
– Kiểu giá trị được định nghĩa sẳn (int,char …)
– Kiểu tham chiếu: lớp, struct, mảng, chuỗi,…
Trang 64Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 64
{ public string hoten;
private bool GioiTinh;
protected DateTime NgaySinh;
internal float[] DsDiem = new
static void Main(string[] args) {
SinhVien sv = new SinhVien(); sv.hoten = "Nguyen Nam";
//sv.GioiTinh = false;
//sv.NgaySinh = DateTime.Parse("12/10/79"); sv.DsDiem[0] = 5;
}
} }
Trang 65Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 65
Trường tĩnh [1]
• Được khai báo trong 1 lớp
• Khi sử dụng không cần phải tạo ra lớp chứa trường tĩnh
• Khi khai b áo chỉ cần dùng static trước tên biến
• Truy xuất: <tênlớp>.tên trường tĩnh
Trang 66Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 66
Ví dụ trường tĩnh
using System ;
public class List
{
public static int Dem = 0 ;
public List ()//H àm dựng: được gọi khi tạo lớp
Response.Write ( List Dem );
List n1 = new List ();
Response.Write ( List Dem );
List n2 = new List ();
Response.Write ( List Dem );
}
}
Trang 67Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 67
Phương thức(method)
• Là tập hợp các câu lệnh
• Được khai báo trong lớp hoặc cấu trúc, phải chỉ rõ mức truy cập, tên, kiểu trả về,danh sách các tham số Nếu không có tham số phải có cặp dấu ngoặc
• Phương thức không trả về giá trị có kiểu trả về là void
• Dùng return để trả về giá trị của phương thức
Trang 68Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 68
Tham chi u ref and out [1] ếu ref and out [1]
Trang 69Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 69
Tham chi u ref and out [2] ếu ref and out [1]
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int x = 0 ; //int x; > Error
int y = 0 ; //int y; > Error
Point p = new Point ( 100 , 200 );
Trang 70Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 70
Tham chi u ref and out [3] ếu ref and out [1]
Trang 71Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 71
Tham chi u ref and out [4] ếu ref and out [1]
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int x = 0 ; // int x; > Error
int y = 0; // int y; > Error
Point p = new Point ( 100 , 200 );
p GetPoint ( ref x , ref y );
Trang 72Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 72
Tham chi u ref and out [5] ếu ref and out [1]
Trang 73Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 73
Tham chi u ref and out [6] ếu ref and out [1]
public partial class _Default : System.Web.UI.Page
Point p = new Point ( 100 , 200 );
p GetPoint (out x ,out y );
•Không cần khởi tạo giá trị cho các tham số
•Khi xây dựng và gọi phương thức phải dùng out
Trang 74Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 74
Danh sách các tham số có chiều dài thay đổi [1]
• C# cho phép khai báo 1 tham số nhưng khi gọi phương thức thì số lượng tham số có thể thay đổi
• Ví dụ như WriteLine(…)
• Sử dụng từ khoá params để khai báo tham
số có chiều dài thay đổi.
Trang 75Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 75
class LopCon : LopCha
{ Cai dat lop con}
Trang 76Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 76
Ví dụ về kế thừa [1]
using System ;
public class Person
{
protected string name ; //protected Field
public Person ( string name ) //Function as a Constructor {
this name = name ;
Trang 77Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 77
Trang 78Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 78
• Person là lớp cơ sở (lớp cha).
• Employee là lớp dẫn xuất (lớp con) từ lớp
Person , vì thế:
– Nó kế thừa tất cả các dữ liệu và hàm thành
viên của lớp cha (trừ private)
– Constructors không tự động kế thừa lên lớp cha, do đó người sử dụng phải chỉ rõ:
public Employee( string name ) :base ( name ){…}
Trang 79Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 79
Hàm nạp chồng (Overloading )
• Hàm nạp chồng là hàm trùng tên trong một lớp nhưng khác nhau về số lượng và kiểu của các tham số
• Không nạp chồng dựa vào tên tham số và kiểu trả
về của các tham số
Trang 80Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 80
Trang 81Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 81
Trang 82Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 82
Hàm ghi đè (Overriding) [1]
Hàm ghi đè là hàm giống nhau trên cả lớp cha và lớp con.
Để ghi đè một hàm đã có trên lớp cha:
giống với lớp cha
Trang 83Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 83
Hàm ảo (Virtual Functions) [1]
• Cách xây dựng hàm ảo giống như hàm ghi
đè nhưng sử dụng từ khoá virtual trong hàm của lớp cha và override trong hàm của lớp con
• Khi gọi hàm, trình biên dịch sẽ nhìn vào lớp thực sự được tạo ra và gọi hàm tương ứng trên lớp này
Trang 84Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 84
Giao diện (Interfaces)
• Giao diện giống như lớp trừu tượng
• Chứa các phương thức trừu tượng nhưng không cài đặt.
• Một lớp kế thừa lên 1 giao diện phải cài đặt tất
cả các phương thức trên giao diện đó.
• Một lớp chỉ kế thừa lên 1 lớp khác nhưng có thể
kế thừa trên nhiều giao diện.
Trang 85Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 85
Trang 86Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 86
Trang 87Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 87
Trang 88Nguyễn Hoàng Hà - Khoa CNTT-ĐHKH 88
Gi ới thiệu [1]
• Thuộc tính trong 1 lớp được sử dụng để lấy
và thay đổi giá trị trong lớp.
• Một thuộc tính thường có 2 khối lệnh:
– Get: trả về một giá trị
– Set: Gán một giá trị mới
– Từ khoá value được sử dụng để xác định giá trị được gán trong khối set
• Giống như hàm thuộc tính có thể dùng bổ từ virtual, override, abstract, static