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

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

on

  • 1,077 views

Xây dựng lớp, cấu trú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
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

Statistics

Views

Total Views
1,077
Views on SlideShare
860
Embed Views
217

Actions

Likes
2
Downloads
100
Comments
0

1 Embed 217

http://forum.hoclaptrinhweb.com 217

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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 - Lập trình winform - Giáo trình FPT Presentation Transcript

  • Bài 2:Lập trình hướng đối tượng & Collection
  • 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
  • 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áoMục tiêu bài họcXâ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áoLập trình hướng đối tượng & Collection 3
  • LỚP, CẤU TRÚC VÀĐỐI TƯỢNGLập trình hướng đối tượng & Collection 4LỚP, CẤU TRÚC VÀĐỐI TƯỢNG
  • Định nghĩa lớpVisual BasicĐịnh nghĩa lớpTạo đối tượng từ lớpC#Public Class SanphamEnd Classpublic class Sanpham{}Định nghĩa lớpTạo đối tượng từ lớpLập trình hướng đối tượng & Collection 5Dim dtSanpham As SanphamdtSanpham = New Sanpham()Sanpham dtSanpham ;dtSanpham = new Sanpham();
  • Phương thức khởi tạoVisual BasicKhở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 Subpublic 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 6Public Sub Sanpham(As Decimal)End Subpublic void Sanpham(decimal gia){}
  • Định nghĩa các trườngvà phương thức cho lớpVisual BasicĐịnh nghĩa trườngĐịnh nghĩa phương thứcC#Private soluong As IntegerPublic gia As Decimalprivate int soluong;public decimal gia;Định nghĩa trườngĐịnh nghĩa phương thứcLập trình hướng đối tượng & Collection 7Sub hienthi()End Subpublic void hienthi(){}Function hienthi() As IntegerEnd Functionpublic int hienthi(){}
  • Điều khiển truy cậpPhạ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 NLập trình hướng đối tượng & Collection 8Khi build solution, mỗi project trong solution được buildthành một assemplyĐiều khiển truy cập mặc định là privateKhác assembly Y N N N
  • Kế thừaSanPhamstring mastring tendecimal giastring hienThiThongTin()Lớp cơ sởLập trình hướng đối tượng & Collection 9Sachstring mastring tendecimal giastring hienThiThongTin()string tacgiaPhanMemstring mastring tendecimal giastring hienThiThongTin()string phienbanLớp dẫn xuất
  • Viết từ khóa virtual trước phương thức có thể sẽ đượcghi đè ở các lớp dẫn xuấtTạ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 10public 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;}}
  • Đị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-virtualGhi đè lên phương thức virtualTạo lớp dẫn xuấtpublic class TenLopDanXuat: TenLopCoSopublic 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-virtualGhi đè lên phương thức virtualLập trình hướng đối tượng & Collection 11base.tenPhuongThuc(danhSachThamSo)base.tenThuocTinhpublic new kieuTraVe tenPhuongThucpublic override kieuTraVe tenPhuongThuc
  • Demo tạo lớp dẫn xuấtclass 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 12class 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();}}
  • Cách khác để ghi đè lên một phương thứcDemo tạo lớp dẫn xuấtpublic override string hienThiThongTin(){return base.Ma + "n" + base.Ten + "n" + Tacgia + "n" +base.Gia;}Lập trình hướng đối tượng & Collection 13public override string hienThiThongTin(){return base.hienThiThongTin() + "n" + Tacgia;}Gọi đến phương thứchienThiThongTin() của lớp cha
  • 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ìnhLập trình hướng đối tượng & Collection 14
  • Demo sử dụng đa hìnhSach 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 15Sach 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());
  • Cho phương thức hienThi như sauHãy đoán kết quả khi gọi phương thức hienThi như sauDemo sử dụng đa hìnhprivate void hienThi(SanPham sanpham){MessageBox.Show(sanpham.hienThiThongTin());}Cho phương thức hienThi như sauHãy đoán kết quả khi gọi phương thức hienThi như sauLập trình hướng đối tượng & Collection 16Sach sach = new Sach("S001", "Lap trinh Winform", "Joel Murach", 20);PhanMem phanmem = new PhanMem("PM001", "Kapersky", "2012", 30);hienThi(sach);hienThi(phanmem);
  • 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úcTiế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úcDù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úcTiế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
  • 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ạoCấu trúcHạ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ạoLập trình hướng đối tượng & Collection 18
  • Demo định nghĩa cấu trúcpublic 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 19public 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;}}
  • Khai báo và gán giá trị cho cấu trúcKhởi tạo giá trị cho cấu trúcSanPham 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úcKhai báo và gán giá trị cho cấu trúcKhởi tạo giá trị cho cấu trúcLập trình hướng đối tượng & Collection 20SanPham sp2 = new SanPham("002", "SH", 120000000);MessageBox.Show(sp2. hienThiThongTin());
  • NAMESPACESLập trình hướng đối tượng & Collection 21NAMESPACES
  • .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à SytemLớ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à SytemLập trình hướng đối tượng & Collection 22
  • Một số namespaces thông dụngCác kiểu cơ bản thuộc namespaces SystemSystem.CollectionsSystem.Collections.GenericSystem.IOSystem.Windows.FormsNamespacesMột số namespaces thông dụngCác kiểu cơ bản thuộc namespaces SystemSystem.CollectionsSystem.Collections.GenericSystem.IOSystem.Windows.FormsLập trình hướng đối tượng & Collection 23
  • 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ợNamespacesLập trình hướng đối tượng & Collection 24
  • CẤU TRÚC DATETIME& LỚP STRINGLập trình hướng đối tượng & Collection 25CẤU TRÚC DATETIME& LỚP STRING
  • Thuộc namespace SystemCú pháp tạo đối tượng DateTimeVí dụCấu trúc DateTimeDateTime 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 DateTimeVí 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");
  • Thuộc tính của DateTimeThuộc tính Mô tảNow Trả về thời gian và ngày tháng hiện tạiToday Trả về ngày tháng hiện tạiMonth Trả về tháng của giá trị DateTimeDay Trả về ngày của giá trị DateTimeYear Trả về năm của giá trị DateTimeLập trình hướng đối tượng & Collection 27Year Trả về năm của giá trị DateTimeHour Trả về giờ của giá trị DateTimeMinute Trả về phút của giá trị DateTimeSecond Trả về giây của giá trị DateTimeDateTime thoiGianHienTai = DateTime.Now; //30/1/2010 10:26:35DateTime ngayThangHienTai = DateTime.Today; //30/1/2010 12:00:00 AMint thang = ngayThangHienTai.Day; //1
  • Phương thức của DateTimePhươ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 DateTimeaddMonths(sothang) Thêm số tháng vào giá trị kiểu DateTime vàtrả về giá trị khác kiểu DateTimeaddYears(sonam) Thêm số năm vào giá trị kiểu DateTime và trảvề giá trị khác kiểu DateTimeLập trình hướng đối tượng & Collection 28Thêm số năm vào giá trị kiểu DateTime và trảvề giá trị khác kiểu DateTimeDaysInMonth(nam, thang) Trả về số ngày có trong 1 tháng năm xác địnhIsLeapYear(nam) Trả về giá trị Boolean cho biết năm được chỉ racó phải là năm nhuận hay khôngDateTime tgianHienTai = DateTime.Now; //30/1/2010 10:26:35DateTime tgianMoi = tgianHienTai.AddDays(60); //30/4/2010 10:26:35
  • Thuộc namespace SystemLớp StringThuộc tính Mô tảLength Lấy số ký tự trong chuỗiIndex Mô tả[chiso] Truy cập đến ký tự tại vị trí được chỉ raLập trình hướng đối tượng & Collection 29Lập trình hướng đối tượng & Collection 29Phươ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ôngEndsWith(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ôngIndexOf(chuoi) Trả về vị trí xuất hiện chuỗi đầu tiênInsert(chisodau, chuoi) Thêm chuỗi được chỉ ra vào vị trí xác địnhRemove(chisodau, soluong) Trả về chuỗi với số lượng ký tự được xóa từ vịtrí được chỉ ra
  • Demo sử dụng Stringstring chars = "abcdefg";char a = chars[0]; //achar b = chars[1]; //bbool isStartWith = chars.StartsWith("abc"); //truebool isEndWith = chars.EndsWith("abc"); //falsestring tenCongTy = "Mike Murach and Associates";int index1 = tenCongTy.IndexOf("Murach"); //5int index2 = tenCongTy.LastIndexOf(" "); //15Lập trình hướng đối tượng & Collection 30string chars = "abcdefg";char a = chars[0]; //achar b = chars[1]; //bbool isStartWith = chars.StartsWith("abc"); //truebool isEndWith = chars.EndsWith("abc"); //falsestring tenCongTy = "Mike Murach and Associates";int index1 = tenCongTy.IndexOf("Murach"); //5int index2 = tenCongTy.LastIndexOf(" "); //15
  • MẢNG VÀCOLLECTIONLập trình hướng đối tượng & Collection 31MẢNG VÀCOLLECTION
  • Cú pháp khai báo mảng một chiềuVí dụMảngkieu[] 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 32int[] 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 };
  • Kiểu giá trị Giá trị mặc địnhSố 0Ký tự (char) 0 (ký tự null)Boolean FalseDateTime 01/01/0001 00:00:00Các giá trị mặc định của mảngDateTime 01/01/0001 00:00:00Kiểu tham chiếu nullLập trình hướng đối tượng & Collection 33
  • Lấy độ dài của mảngTruy cập đến phần tử của mảngGán giá trị cho các phần tử của mảngDuyệt qua các phần tử của mảngThao tác với mảngint tong = diem[0] + diem[1] + diem[2];int dodai = diem.LengthLấy độ dài của mảngTruy cập đến phần tử của mảngGán giá trị cho các phần tử của mảngDuyệt qua các phần tử của mảngLập trình hướng đối tượng & Collection 34diem[0] = 9;int tong = 0;for (int i = 0; i < diem.Length; i++){tong += diem[i];}
  • Khai báo mảng hai chiềuGán giá trị cho các phần tửMảng hai chiềukieu[,] 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ềuGán giá trị cho các phần tửLập trình hướng đối tượng & Collection 35diem[0, 0] = 8;diem[0, 1] = 9;
  • 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ớpLớp ArrayThuộc tính Mô tảLength Cho biết số phần tử của elementLập trình hướng đối tượng & Collection 36Phương thức thực thể Mô tảGetLength(chieu) Cho biết số phần tử của chiều được chỉ raGetUpperBound(chieu) Cho biết chỉ số của phần tử cuối cùng củachiều được chỉ raTham khảo thêm các thuộc tính và phương thức trên trang msdn
  • 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ácBinarySearch(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ỉ raSort(mang) Sắp xếp các thành phần của mảng một chiều theothứ tự tăng dầnLớp ArrayLập trình hướng đối tượng & Collection 37string[] tenArr = { "Thanh", "Kien", "Linh", "An" };Array.Sort(tenArr);string str="";foreach (string ten in tenArr){str += ten + "n";}MessageBox.Show(str);
  • 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 đâyCollection không định kiểuCá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 đâyLập trình hướng đối tượng & Collection 38
  • Boxing và UnboxingLập trình hướng đối tượng & Collection 39Boxing Unboxing
  • Demo sử dụng collection không định kiểuArrayList 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ạysum += number;}Lập trình hướng đối tượng & Collection 40ArrayList 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ạysum += number;}
  • 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 CollectionCollection định kiểuCollection 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 CollectionLập trình hướng đối tượng & Collection 41HashSet<T> Lưu trữ tập các giá trịLinkedList<T> Lưu trữ danh sách liên kết đôiList<T> Lưu trữ mảng các đối tượngQueue<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ếpStack<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
  • Demo sử dụng collection định kiểuList<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 42List<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;}
  • TỰ SINH MÃKHAI BÁOLập trình hướng đối tượng & Collection 43TỰ SINH MÃKHAI BÁO
  • 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ếtBạ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ạnBạ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ạnTự 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ếtBạ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ạnBạ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ạnLập trình hướng đối tượng & Collection 44
  • Khai báo đối tượng thuộc lớp KhachHang chưa đượcđịnh nghĩaDemo sử dụng tínhnăng tự sinh mã khai báoChọnGenerate class for‘KhachHang’Lập trình hướng đối tượng & Collection 45Lớp KhachHang được tạoDấu răng cưa báo lỗi bịmất đi
  • Gọi đến phương thức hienThiThongTin chưa đượcđịnh nghĩaDemo sử dụng tínhnăng tự sinh mã khai báoLập trình hướng đối tượng & Collection 46Phương thứchienThiThongTinđược tự động định nghĩa
  • Gọi đến phương thức hienThiThongTin chưa đượcđịnh nghĩa với hai đối số name và ageDemo sử dụng tínhnăng tự sinh mã khai báoLập trình hướng đối tượng & Collection 47Thêm một phương thứchienThiThongTinđược định nghĩa với hai tham số
  • 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ừaTrong 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, StringTổng kết bài họcCá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ừaTrong 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, StringLập trình hướng đối tượng & Collection 48
  • 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ọcCollection đượ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