49
Bài 2: Lập trình hướng đối tượng & Collection

Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Embed Size (px)

DESCRIPTION

Xây dựng lớp, cấu trúc Tạo và sử dụng đối tượng Xây dựng lớp kế thừa Khái niệm đa hình và sử dụng đa hình Sử dụng các lớp và đối tượng dựng sẵn Collection Tự sinh mã khai báo Mục tiêu bài học Xây dựng lớp, cấu trúc Tạo và sử dụng đối tượng Xây dựng lớp kế thừa Khái niệm đa hình và sử dụng đa hình Sử dụng các lớp và đối tượng dựng sẵn Collection Tự sinh mã khai báo

Citation preview

Page 1: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Bài 2:Lập trình hướng đối tượng & Collection

Page 2: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Giới thiệu về .NET và Visual StudioGiới thiệu về các kiến thức lập trình cơ bản trên ngônngữ C#

Kiểu dữ liệuToán tửThao tác với chuỗiCấu trúc điều khiểnPhương thứcXử lý ngoại lệ

Hệ thống bài cũ

Giới thiệu về .NET và Visual StudioGiới thiệu về các kiến thức lập trình cơ bản trên ngônngữ C#

Kiểu dữ liệuToán tửThao tác với chuỗiCấu trúc điều khiểnPhương thứcXử lý ngoại lệ

Lập trình hướng đối tượng & Collection 2

Page 3: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Xây dựng lớp, cấu trúcTạo và sử dụng đối tượngXây dựng lớp kế thừaKhái niệm đa hình và sử dụng đa hìnhSử dụng các lớp và đối tượng dựng sẵnCollectionTự sinh mã khai báo

Mục tiêu bài học

Xây dựng lớp, cấu trúcTạo và sử dụng đối tượngXây dựng lớp kế thừaKhái niệm đa hình và sử dụng đa hìnhSử dụng các lớp và đối tượng dựng sẵnCollectionTự sinh mã khai báo

Lập trình hướng đối tượng & Collection 3

Page 4: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

LỚP, CẤU TRÚC VÀĐỐI TƯỢNG

Lập trình hướng đối tượng & Collection 4

LỚP, CẤU TRÚC VÀĐỐI TƯỢNG

Page 5: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Định nghĩa lớp

Visual Basic

Định nghĩa lớp

Tạo đối tượng từ lớp

C#

Public Class Sanpham

End Class

public class Sanpham{}

Định nghĩa lớp

Tạo đối tượng từ lớp

Lập trình hướng đối tượng & Collection 5

Dim dtSanpham As SanphamdtSanpham = New Sanpham()

Sanpham dtSanpham ;dtSanpham = new Sanpham();

Page 6: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Phương thức khởi tạo

Visual Basic

Khởi tạo không có tham số

Khởi tạo có tham số

C#

Khởi tạo không có tham số

Khởi tạo có tham số

Public Sub Sanpham()

End Sub

public Sanpham(){}

Khởi tạo không có tham số

Khởi tạo có tham số

Khởi tạo không có tham số

Khởi tạo có tham số

Lập trình hướng đối tượng & Collection 6

Public Sub Sanpham(As Decimal)

End Sub

public void Sanpham(decimal gia){}

Page 7: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Định nghĩa các trườngvà phương thức cho lớp

Visual Basic

Định nghĩa trường

Định nghĩa phương thức

C#

Private soluong As IntegerPublic gia As Decimal

private int soluong;public decimal gia;

Định nghĩa trường

Định nghĩa phương thức

Lập trình hướng đối tượng & Collection 7

Sub hienthi()

End Sub

public void hienthi(){}

Function hienthi() As Integer

End Function

public int hienthi(){}

Page 8: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Điều khiển truy cập

Phạm vi public internal protected privateCùng lớp Y Y Y YLớp kế thừa Y Y Y NCùng assembly Y Y N NKhác assembly Y N N N

Lập trình hướng đối tượng & Collection 8

Khi build solution, mỗi project trong solution được buildthành một assemply

Điều khiển truy cập mặc định là private

Khác assembly Y N N N

Page 9: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Kế thừa

SanPham

string mastring tendecimal giastring hienThiThongTin()

Lớp cơ sở

Lập trình hướng đối tượng & Collection 9

Sach

string mastring tendecimal giastring hienThiThongTin()

string tacgia

PhanMem

string mastring tendecimal giastring hienThiThongTin()

string phienban

Lớp dẫn xuất

Page 10: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Viết từ khóa virtual trước phương thức có thể sẽ đượcghi đè ở các lớp dẫn xuất

Tạo lớp cơ sở

public class SanPham{

public string Ma { get; set; }public string Ten { get; set; }public decimal Gia { get; set; }

public SanPham(string ma, string ten, decimal gia){

this.Ma = ma;this.Ten = ten;this.Gia = gia;

}

public virtual string hienThiThongTin(){

return Ma + "\n" + Ten + "\n" + Gia;}

}Lập trình hướng đối tượng & Collection 10

public class SanPham{

public string Ma { get; set; }public string Ten { get; set; }public decimal Gia { get; set; }

public SanPham(string ma, string ten, decimal gia){

this.Ma = ma;this.Ten = ten;this.Gia = gia;

}

public virtual string hienThiThongTin(){

return Ma + "\n" + Ten + "\n" + Gia;}

}

Page 11: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Định nghĩa lớp dẫn xuất

Định nghĩa phương thức khởi tạo gọi đến phương thứckhởi tạo của lớp cơ sở

Gọi đến phương thức hoặc thuộc tính của lớp cơ sở

Ẩn phương thức non-virtual

Ghi đè lên phương thức virtual

Tạo lớp dẫn xuất

public class TenLopDanXuat: TenLopCoSo

public TenLop (danhSachThamSo): base(danhSachThamSo)

Định nghĩa lớp dẫn xuất

Định nghĩa phương thức khởi tạo gọi đến phương thứckhởi tạo của lớp cơ sở

Gọi đến phương thức hoặc thuộc tính của lớp cơ sở

Ẩn phương thức non-virtual

Ghi đè lên phương thức virtual

Lập trình hướng đối tượng & Collection 11

base.tenPhuongThuc(danhSachThamSo)base.tenThuocTinh

public new kieuTraVe tenPhuongThuc

public override kieuTraVe tenPhuongThuc

Page 12: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Demo tạo lớp dẫn xuất

class Sach: SanPham{

public string Tacgia { get; set; }

public Sach(string ma, string ten, string tacgia, decimal gia): base(ma, ten, gia)

{this.Tacgia = tacgia;

}

public override string hienThiThongTin(){

return base.hienThiThongTin();}

}

Lập trình hướng đối tượng & Collection 12

class Sach: SanPham{

public string Tacgia { get; set; }

public Sach(string ma, string ten, string tacgia, decimal gia): base(ma, ten, gia)

{this.Tacgia = tacgia;

}

public override string hienThiThongTin(){

return base.hienThiThongTin();}

}

Page 13: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Cách khác để ghi đè lên một phương thức

Demo tạo lớp dẫn xuất

public override string hienThiThongTin(){

return base.Ma + "\n" + base.Ten + "\n" + Tacgia + "\n" +base.Gia;

}

Lập trình hướng đối tượng & Collection 13

public override string hienThiThongTin(){

return base.hienThiThongTin() + "\n" + Tacgia;}

Gọi đến phương thứchienThiThongTin() của lớp cha

Page 14: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Là tính năng quan trọng trong lập trình hướng đối tượngGiúp ứng dụng sẽ ứng xử khác nhau đối với các đốitượng khác nhau kế thừa từ một lớp cơ sởThường được sử dụng khi không xác định được kiểu củađối tượng lúc chạy

Đa hình

Lập trình hướng đối tượng & Collection 14

Page 15: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Demo sử dụng đa hình

Sach sach = new Sach("S001", "Lap trinh Winform", "Joel Murach", 20);PhanMem phanmem = new PhanMem("PM001", "Kapersky", "2012", 30);

SanPham sanpham;sanpham = sach;MessageBox.Show(sanpham.hienThiThongTin());

sanpham = phanmem;MessageBox.Show(sanpham.hienThiThongTin());

Lập trình hướng đối tượng & Collection 15

Sach sach = new Sach("S001", "Lap trinh Winform", "Joel Murach", 20);PhanMem phanmem = new PhanMem("PM001", "Kapersky", "2012", 30);

SanPham sanpham;sanpham = sach;MessageBox.Show(sanpham.hienThiThongTin());

sanpham = phanmem;MessageBox.Show(sanpham.hienThiThongTin());

Page 16: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Cho phương thức hienThi như sau

Hãy đoán kết quả khi gọi phương thức hienThi như sau

Demo sử dụng đa hình

private void hienThi(SanPham sanpham){

MessageBox.Show(sanpham.hienThiThongTin());}

Cho phương thức hienThi như sau

Hãy đoán kết quả khi gọi phương thức hienThi như sau

Lập trình hướng đối tượng & Collection 16

Sach sach = new Sach("S001", "Lap trinh Winform", "Joel Murach", 20);PhanMem phanmem = new PhanMem("PM001", "Kapersky", "2012", 30);hienThi(sach);hienThi(phanmem);

Page 17: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Dùng để định nghĩa kiểu biến giống như lớp nhưng kiểugiá trị

Các kiểu giá trị như int, decimal, DateTime…Ưu điểm của cấu trúc

Tiết kiệm bộ nhớKhởi tạo nhanh hơn Sử dụng cấu trúc để lưu trữ dữ liệu nhỏ và cho đốitượng muốn lưu trữ kiểu giá trị

Cấu trúc giống lớpCác trường, thuộc tính, phương thức, sự kiện và toán hạngThành viên tĩnh và thành viên thực thể

Cấu trúc

Dùng để định nghĩa kiểu biến giống như lớp nhưng kiểugiá trị

Các kiểu giá trị như int, decimal, DateTime…Ưu điểm của cấu trúc

Tiết kiệm bộ nhớKhởi tạo nhanh hơn Sử dụng cấu trúc để lưu trữ dữ liệu nhỏ và cho đốitượng muốn lưu trữ kiểu giá trị

Cấu trúc giống lớpCác trường, thuộc tính, phương thức, sự kiện và toán hạngThành viên tĩnh và thành viên thực thể

Lập trình hướng đối tượng & Collection 17

Page 18: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Hạn chế của cấu trúc so với lớpKhông hỗ trợ phương thức khởi tạo không có tham sốKhông hỗ trợ kế thừaKhông hỗ trợ thuộc tính tự khởi tạoCác thành viên chỉ được gọi khi được khởi tạo

Cấu trúc

Hạn chế của cấu trúc so với lớpKhông hỗ trợ phương thức khởi tạo không có tham sốKhông hỗ trợ kế thừaKhông hỗ trợ thuộc tính tự khởi tạoCác thành viên chỉ được gọi khi được khởi tạo

Lập trình hướng đối tượng & Collection 18

Page 19: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Demo định nghĩa cấu trúc

public struct SanPham{

public string Ma;public string Ten;public decimal Gia;

public SanPham(string ma, string ten, decimal gia){

this.Ma = ma;this.Ten = ten;this.Gia = gia;

}

public string hienThiThongTin(){

return Ma + "\n" + Ten + "\n" + Gia;}

}

Lập trình hướng đối tượng & Collection 19

public struct SanPham{

public string Ma;public string Ten;public decimal Gia;

public SanPham(string ma, string ten, decimal gia){

this.Ma = ma;this.Ten = ten;this.Gia = gia;

}

public string hienThiThongTin(){

return Ma + "\n" + Ten + "\n" + Gia;}

}

Page 20: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Khai báo và gán giá trị cho cấu trúc

Khởi tạo giá trị cho cấu trúc

SanPham sp;sp.Ma = "001";sp.Ten = "Wave RS";sp.Gia = 20000000;

MessageBox.Show(sp.hienThiThongTin());

Demo khai báo và khởi tạo cấu trúc

Khai báo và gán giá trị cho cấu trúc

Khởi tạo giá trị cho cấu trúc

Lập trình hướng đối tượng & Collection 20

SanPham sp2 = new SanPham("002", "SH", 120000000);MessageBox.Show(sp2. hienThiThongTin());

Page 21: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

NAMESPACES

Lập trình hướng đối tượng & Collection 21

NAMESPACES

Page 22: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

.NET 4.0 cung cấp rất nhiều lớp và cấu trúc cài đặt sẵnCác lớp và cấu trúc này thuộc .NET FrameWorkLibraryCác lớp và cấu trúc liên quan đến nhau được nhómthành một NamespacesNamespaces được tổ chức theo cấu trúc phân cấpNamespaces lớn nhất là Sytem

Lớp và cấu trúc cài đặt sẵn

.NET 4.0 cung cấp rất nhiều lớp và cấu trúc cài đặt sẵnCác lớp và cấu trúc này thuộc .NET FrameWorkLibraryCác lớp và cấu trúc liên quan đến nhau được nhómthành một NamespacesNamespaces được tổ chức theo cấu trúc phân cấpNamespaces lớn nhất là Sytem

Lập trình hướng đối tượng & Collection 22

Page 23: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Một số namespaces thông dụngCác kiểu cơ bản thuộc namespaces SystemSystem.CollectionsSystem.Collections.GenericSystem.IOSystem.Windows.Forms

Namespaces

Một số namespaces thông dụngCác kiểu cơ bản thuộc namespaces SystemSystem.CollectionsSystem.Collections.GenericSystem.IOSystem.Windows.Forms

Lập trình hướng đối tượng & Collection 23

Page 24: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Xem file NET35_Namespaces_Poster_LORES để biếtthêm về các lớp được các lớp được hỗ trợ bởi .NET 3.5Xem file PDC2008-NETFX4 để biết thêm về các lớp mớiđược .NET 4 hỗ trợ

Namespaces

Lập trình hướng đối tượng & Collection 24

Page 25: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

CẤU TRÚC DATETIME& LỚP STRING

Lập trình hướng đối tượng & Collection 25

CẤU TRÚC DATETIME& LỚP STRING

Page 26: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Thuộc namespace SystemCú pháp tạo đối tượng DateTime

Ví dụ

Cấu trúc DateTime

DateTime tenbien = new DateTime (nam, thang,ngay [, gio, phut, giay [, miligiay]]);//hoặcDateTime tenbien = DateTime.Parse (string)

Thuộc namespace SystemCú pháp tạo đối tượng DateTime

Ví dụ

Lập trình hướng đối tượng & Collection 26

//1/30/2010 12:00 AMDateTime date1 = new DateTime(10, 01, 30);//1/30/2010 2:15 PMDateTime date2 = new DateTime(2010, 1, 30, 14, 15, 0);//1/30/2010 12:00 AMDateTime date3 = DateTime.Parse("01/30/10");

Page 27: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Thuộc tính của DateTime

Thuộc tính Mô tả

Now Trả về thời gian và ngày tháng hiện tại

Today Trả về ngày tháng hiện tại

Month Trả về tháng của giá trị DateTime

Day Trả về ngày của giá trị DateTime

Year Trả về năm của giá trị DateTime

Lập trình hướng đối tượng & Collection 27

Year Trả về năm của giá trị DateTime

Hour Trả về giờ của giá trị DateTime

Minute Trả về phút của giá trị DateTime

Second Trả về giây của giá trị DateTime

DateTime thoiGianHienTai = DateTime.Now; //30/1/2010 10:26:35DateTime ngayThangHienTai = DateTime.Today; //30/1/2010 12:00:00 AMint thang = ngayThangHienTai.Day; //1

Page 28: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Phương thức của DateTime

Phương thức Mô tả

addDays(songay) Thêm số ngày vào giá trị kiểu DateTime và trảvề giá trị khác kiểu DateTime

addMonths(sothang) Thêm số tháng vào giá trị kiểu DateTime vàtrả về giá trị khác kiểu DateTime

addYears(sonam) Thêm số năm vào giá trị kiểu DateTime và trảvề giá trị khác kiểu DateTime

Lập trình hướng đối tượng & Collection 28

Thêm số năm vào giá trị kiểu DateTime và trảvề giá trị khác kiểu DateTime

DaysInMonth(nam, thang) Trả về số ngày có trong 1 tháng năm xác định

IsLeapYear(nam) Trả về giá trị Boolean cho biết năm được chỉ racó phải là năm nhuận hay không

DateTime tgianHienTai = DateTime.Now; //30/1/2010 10:26:35DateTime tgianMoi = tgianHienTai.AddDays(60); //30/4/2010 10:26:35

Page 29: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Thuộc namespace System

Lớp String

Thuộc tính Mô tả

Length Lấy số ký tự trong chuỗi

Index Mô tả

[chiso] Truy cập đến ký tự tại vị trí được chỉ ra

Lập trình hướng đối tượng & Collection 29Lập trình hướng đối tượng & Collection 29

Phương thức Mô tả

StartsWith(chuoi) Trả về giá trị boolean cho biết chuỗi đó cóđược bắt đầu bằng chuỗi chỉ ra hay không

EndsWith(chuoi) Trả về giá trị boolean cho biết chuỗi đó cóđược kết thúc bằng chuỗi chỉ ra hay không

IndexOf(chuoi) Trả về vị trí xuất hiện chuỗi đầu tiên

Insert(chisodau, chuoi) Thêm chuỗi được chỉ ra vào vị trí xác định

Remove(chisodau, soluong) Trả về chuỗi với số lượng ký tự được xóa từ vịtrí được chỉ ra

Page 30: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Demo sử dụng String

string chars = "abcdefg";

char a = chars[0]; //'a'char b = chars[1]; //'b'

bool isStartWith = chars.StartsWith("abc"); //truebool isEndWith = chars.EndsWith("abc"); //false

string tenCongTy = "Mike Murach and Associates";int index1 = tenCongTy.IndexOf("Murach"); //5int index2 = tenCongTy.LastIndexOf(" "); //15

Lập trình hướng đối tượng & Collection 30

string chars = "abcdefg";

char a = chars[0]; //'a'char b = chars[1]; //'b'

bool isStartWith = chars.StartsWith("abc"); //truebool isEndWith = chars.EndsWith("abc"); //false

string tenCongTy = "Mike Murach and Associates";int index1 = tenCongTy.IndexOf("Murach"); //5int index2 = tenCongTy.LastIndexOf(" "); //15

Page 31: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

MẢNG VÀCOLLECTION

Lập trình hướng đối tượng & Collection 31

MẢNG VÀCOLLECTION

Page 32: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Cú pháp khai báo mảng một chiều

Ví dụ

Mảng

kieu[] tenMang;tenMang = new kieu[chieuDaiMang]//hoặckeu[] tenMang = new kieu[chieuDaiMang]

int[] diem;diem = new int[10];//hoặcint[] diem = new int[10];//khai báo và khởi tạo giá trị cho mảngint[] diem3 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

Lập trình hướng đối tượng & Collection 32

int[] diem;diem = new int[10];//hoặcint[] diem = new int[10];//khai báo và khởi tạo giá trị cho mảngint[] diem3 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

Page 33: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Kiểu giá trị Giá trị mặc định

Số 0

Ký tự (char) '\0' (ký tự null)

Boolean False

DateTime 01/01/0001 00:00:00

Các giá trị mặc định của mảng

DateTime 01/01/0001 00:00:00

Kiểu tham chiếu null

Lập trình hướng đối tượng & Collection 33

Page 34: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Lấy độ dài của mảng

Truy cập đến phần tử của mảng

Gán giá trị cho các phần tử của mảng

Duyệt qua các phần tử của mảng

Thao tác với mảng

int tong = diem[0] + diem[1] + diem[2];

int dodai = diem.Length

Lấy độ dài của mảng

Truy cập đến phần tử của mảng

Gán giá trị cho các phần tử của mảng

Duyệt qua các phần tử của mảng

Lập trình hướng đối tượng & Collection 34

diem[0] = 9;

int tong = 0;for (int i = 0; i < diem.Length; i++){

tong += diem[i];}

Page 35: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Khai báo mảng hai chiều

Gán giá trị cho các phần tử

Mảng hai chiều

kieu[,] tenMang = new kieu[hang, cot]//ví dụ:int[,] diem = new int [3, 2];//khai báo và khởi tạo giá trị cho mảngint[,] diem2 = { { 9, 8 }, { 7, 6 }, { 5, 9 } };

Khai báo mảng hai chiều

Gán giá trị cho các phần tử

Lập trình hướng đối tượng & Collection 35

diem[0, 0] = 8;diem[0, 1] = 9;

Page 36: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Mỗi mảng là một thể hiện của lớp ArrayLớp Array chứa các thuộc tính và phương thức để thaotác với lớp

Lớp Array

Thuộc tính Mô tả

Length Cho biết số phần tử của element

Lập trình hướng đối tượng & Collection 36

Phương thức thực thể Mô tả

GetLength(chieu) Cho biết số phần tử của chiều được chỉ ra

GetUpperBound(chieu) Cho biết chỉ số của phần tử cuối cùng củachiều được chỉ ra

Tham khảo thêm các thuộc tính và phương thức trên trang msdn

Page 37: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Phương thức tĩnh Mô tả

Copy(mang1, mang2, chieudai) Copy tất cả các giá trị từ mảng này sang mảng khác

BinarySearch(mang, giatri) Tìm kiếm trên mảng một chiều đã được sắp xếptheo thứ tự tăng dần và trả về chỉ số của phần tử cógiá trị được chỉ ra

Sort(mang) Sắp xếp các thành phần của mảng một chiều theothứ tự tăng dần

Lớp Array

Lập trình hướng đối tượng & Collection 37

string[] tenArr = { "Thanh", "Kien", "Linh", "An" };Array.Sort(tenArr);string str="";foreach (string ten in tenArr){

str += ten + "\n";}MessageBox.Show(str);

Page 38: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Các lớp collection không định kiểu được lưu trữ trongnamespace System.CollectionsLưu trữ các kiểu khác nhau trong một collectionCác đối tượng khi lưu vào collection không định kiểu đượctự động chuyển thành kiểu Object (boxing)Khi lấy dữ liệu ra khỏi collection cần phải ép dữ liệu vềđúng kiểu ban đầu (unboxing)Nhược điểm:

Cần phải ép về kiểu ban đầuThường gặp lỗi xẩy ra khi ép kiểu sai Collection định kiểu ra đời để khắc phục nhược điểmnày, tuy nhiên Collection không định kiểu vẫn được sử dụngđể phát triển tiếp những ứng dụng trước đây

Collection không định kiểu

Các lớp collection không định kiểu được lưu trữ trongnamespace System.CollectionsLưu trữ các kiểu khác nhau trong một collectionCác đối tượng khi lưu vào collection không định kiểu đượctự động chuyển thành kiểu Object (boxing)Khi lấy dữ liệu ra khỏi collection cần phải ép dữ liệu vềđúng kiểu ban đầu (unboxing)Nhược điểm:

Cần phải ép về kiểu ban đầuThường gặp lỗi xẩy ra khi ép kiểu sai Collection định kiểu ra đời để khắc phục nhược điểmnày, tuy nhiên Collection không định kiểu vẫn được sử dụngđể phát triển tiếp những ứng dụng trước đây

Lập trình hướng đối tượng & Collection 38

Page 39: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Boxing và Unboxing

Lập trình hướng đối tượng & Collection 39

Boxing Unboxing

Page 40: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Demo sử dụng collection không định kiểu

ArrayList numbers = new ArrayList();numbers.Add(3);numbers.Add(7);numbers.Add("Test"); //Không gây lỗi biên dịchint sum = 0;for (int i = 0; i < numbers.Count; i++){

int number = (int)numbers[i]; //Gây lỗi lúc chạy

sum += number;}

Lập trình hướng đối tượng & Collection 40

ArrayList numbers = new ArrayList();numbers.Add(3);numbers.Add(7);numbers.Add("Test"); //Không gây lỗi biên dịchint sum = 0;for (int i = 0; i < numbers.Count; i++){

int number = (int)numbers[i]; //Gây lỗi lúc chạy

sum += number;}

Page 41: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Các lớp collection định kiểu được lưu trữ trongnamespace System.Collections.GenericLưu trữ cùng một kiểu dữ liệu trong một Collection

Collection định kiểu

Collection Mô tả

Dictionary<TKey, TValue> Lưu trữ collection gồm cặp khóa và giá trị

HashSet<T> Lưu trữ tập các giá trị

Các lớp collection định kiểu được lưu trữ trongnamespace System.Collections.GenericLưu trữ cùng một kiểu dữ liệu trong một Collection

Lập trình hướng đối tượng & Collection 41

HashSet<T> Lưu trữ tập các giá trị

LinkedList<T> Lưu trữ danh sách liên kết đôi

List<T> Lưu trữ mảng các đối tượng

Queue<T> Lưu trữ hàng đợi “Vào trước, ra trước”

SortedSet<T> Lưu trữ tập các giá trị được sắp xếp

Stack<T> Lưu trữ đối tượng theo “Vào sau, ra trước”

Tìm hiểu thêm về các collection và cách sử dụng chúng trên tranghttp://msdn.microsoft.com/en-us/library/system.collections.generic.aspx

Page 42: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Demo sử dụng collection định kiểu

List<int> numbers = new List<int>();numbers.Add(3);numbers.Add(7);numbers.Add("Test"); //Gây lỗi biên dịch, tránh gây lỗi lúc chạyint sum = 0;for (int i = 0; i < numbers.Count; i++){

int number = numbers[i];

sum += number;}

Lập trình hướng đối tượng & Collection 42

List<int> numbers = new List<int>();numbers.Add(3);numbers.Add(7);numbers.Add("Test"); //Gây lỗi biên dịch, tránh gây lỗi lúc chạyint sum = 0;for (int i = 0; i < numbers.Count; i++){

int number = numbers[i];

sum += number;}

Page 43: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

TỰ SINH MÃKHAI BÁO

Lập trình hướng đối tượng & Collection 43

TỰ SINH MÃKHAI BÁO

Page 44: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Tự sinh mã là tính năng mới của Visual Studio 2010Tính năng này sẽ tự sinh mã khai báo cho bạn khi cầnthiết

Bạn khai báo một đối tượng của lớp chưa định nghĩaTính năng này sẽ tự động sinh mã định nghĩa lớp cho bạn

Bạn gọi một phương thức chưa được định nghĩaTính năng này sẽ định nghĩa phương thức cho bạn

Tự sinh mã khai báo(generate code stubs)

Tự sinh mã là tính năng mới của Visual Studio 2010Tính năng này sẽ tự sinh mã khai báo cho bạn khi cầnthiết

Bạn khai báo một đối tượng của lớp chưa định nghĩaTính năng này sẽ tự động sinh mã định nghĩa lớp cho bạn

Bạn gọi một phương thức chưa được định nghĩaTính năng này sẽ định nghĩa phương thức cho bạn

Lập trình hướng đối tượng & Collection 44

Page 45: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Khai báo đối tượng thuộc lớp KhachHang chưa đượcđịnh nghĩa

Demo sử dụng tínhnăng tự sinh mã khai báo

ChọnGenerate class for

‘KhachHang’

Lập trình hướng đối tượng & Collection 45

Lớp KhachHang được tạo

Dấu răng cưa báo lỗi bịmất đi

Page 46: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Gọi đến phương thức hienThiThongTin chưa đượcđịnh nghĩa

Demo sử dụng tínhnăng tự sinh mã khai báo

Lập trình hướng đối tượng & Collection 46

Phương thứchienThiThongTin

được tự động định nghĩa

Page 47: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Gọi đến phương thức hienThiThongTin chưa đượcđịnh nghĩa với hai đối số name và age

Demo sử dụng tínhnăng tự sinh mã khai báo

Lập trình hướng đối tượng & Collection 47

Thêm một phương thứchienThiThongTin

được định nghĩa với hai tham số

Page 48: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Các khái niệm về lập trình hướng đối tượng và collectiontrong C# giống hệt như trong Visual Basic, chỉ khácnhau về cú phápĐối với kế thừa

Trong lớp cơ sở viết từ khóa virtual trước phương thức sẽđược ghi đèTrong lớp dẫn xuất viết từ khóa override trước phươngthức sẽ được ghi đè

Đa hình là tính năng quan trọng trong lập trình hướngđối tượng giúp ứng dụng sẽ ứng xử khác nhau đối vớicác đối tượng khác nhau kế thừa từ một lớp cơ sởĐể tiện lợi cho quá trình lập trình, .NET cung cấp các đốitượng và cấu trúc được cài đặt sẵn như DateTime, String

Tổng kết bài học

Các khái niệm về lập trình hướng đối tượng và collectiontrong C# giống hệt như trong Visual Basic, chỉ khácnhau về cú phápĐối với kế thừa

Trong lớp cơ sở viết từ khóa virtual trước phương thức sẽđược ghi đèTrong lớp dẫn xuất viết từ khóa override trước phươngthức sẽ được ghi đè

Đa hình là tính năng quan trọng trong lập trình hướngđối tượng giúp ứng dụng sẽ ứng xử khác nhau đối vớicác đối tượng khác nhau kế thừa từ một lớp cơ sởĐể tiện lợi cho quá trình lập trình, .NET cung cấp các đốitượng và cấu trúc được cài đặt sẵn như DateTime, String

Lập trình hướng đối tượng & Collection 48

Page 49: Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trình FPT

Collection được phân làm hai loại Collection định kiểu vàkhông định kiểuCollection không định kiểu có thể lưu nhiều loại đốitượng và collection, nhưng khi lưu sẽ chuyển các đốitượng này về kiểu Object (boxing)Collection định kiểu chỉ lưu một kiểu đã được định nghĩatrước vào collectionVisual Studio 2010 cung cấp tính năng tự sinh mã khaibáo khi các biến hoặc phương thức được gọi chưa đượckhai báo trước đó

Tổng kết bài học

Collection được phân làm hai loại Collection định kiểu vàkhông định kiểuCollection không định kiểu có thể lưu nhiều loại đốitượng và collection, nhưng khi lưu sẽ chuyển các đốitượng này về kiểu Object (boxing)Collection định kiểu chỉ lưu một kiểu đã được định nghĩatrước vào collectionVisual Studio 2010 cung cấp tính năng tự sinh mã khaibáo khi các biến hoặc phương thức được gọi chưa đượckhai báo trước đó

Lập trình hướng đối tượng & Collection 49