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
2. Giới thiệu về .NET và Visual Studio
Giới thiệu về các kiến thức lập trình cơ bản trên ngôn
ngữ C#
Kiểu dữ liệu
Toán tử
Thao tác với chuỗi
Cấu trúc điều khiển
Phương thức
Xử lý ngoại lệ
Hệ thống bài cũ
Giới thiệu về .NET và Visual Studio
Giới thiệu về các kiến thức lập trình cơ bản trên ngôn
ngữ C#
Kiểu dữ liệu
Toán tử
Thao tác với chuỗi
Cấu trúc điều khiển
Phương thức
Xử lý ngoại lệ
Lập trình hướng đối tượng & Collection 2
3. 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
Lập trình hướng đối tượng & Collection 3
4. 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
5. Đị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 Sanpham
dtSanpham = New Sanpham()
Sanpham dtSanpham ;
dtSanpham = new Sanpham();
6. 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)
{
}
7. Định nghĩa các trường
và 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 Integer
Public 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()
{
}
8. Điều khiển truy cập
Phạm vi public internal protected private
Cùng lớp Y Y Y Y
Lớp kế thừa Y Y Y N
Cùng assembly Y Y N N
Khá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 build
thành một assemply
Điều khiển truy cập mặc định là private
Khác assembly Y N N N
9. Kế thừa
SanPham
string ma
string ten
decimal gia
string hienThiThongTin()
Lớp cơ sở
Lập trình hướng đối tượng & Collection 9
Sach
string ma
string ten
decimal gia
string hienThiThongTin()
string tacgia
PhanMem
string ma
string ten
decimal gia
string hienThiThongTin()
string phienban
Lớp dẫn xuất
10. Viết từ khóa virtual trước phương thức có thể sẽ được
ghi đè ở 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;
}
}
11. Đị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ức
khở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ức
khở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
12. 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();
}
}
13. 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ức
hienThiThongTin() của lớp cha
14. 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ới các đối
tượ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
15. 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());
16. 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);
17. Dùng để định nghĩa kiểu biến giống như lớp nhưng kiểu
giá 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 đối
tượng muốn lưu trữ kiểu giá trị
Cấu trúc giống lớp
Các trường, thuộc tính, phương thức, sự kiện và toán hạng
Thà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ểu
giá 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 đối
tượng muốn lưu trữ kiểu giá trị
Cấu trúc giống lớp
Các trường, thuộc tính, phương thức, sự kiện và toán hạng
Thành viên tĩnh và thành viên thực thể
Lập trình hướng đối tượng & Collection 17
18. Hạn chế của cấu trúc so với lớp
Không hỗ trợ phương thức khởi tạo không có tham số
Không hỗ trợ kế thừa
Không hỗ trợ thuộc tính tự khởi tạo
Cá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ớp
Không hỗ trợ phương thức khởi tạo không có tham số
Không hỗ trợ kế thừa
Không hỗ trợ thuộc tính tự khởi tạo
Cá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
19. 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;
}
}
20. 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());
22. .NET 4.0 cung cấp rất nhiều lớp và cấu trúc cài đặt sẵn
Các lớp và cấu trúc này thuộc .NET FrameWork
Library
Các lớp và cấu trúc liên quan đến nhau được nhóm
thành một Namespaces
Namespaces được tổ chức theo cấu trúc phân cấp
Namespaces 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ẵn
Các lớp và cấu trúc này thuộc .NET FrameWork
Library
Các lớp và cấu trúc liên quan đến nhau được nhóm
thành một Namespaces
Namespaces được tổ chức theo cấu trúc phân cấp
Namespaces lớn nhất là Sytem
Lập trình hướng đối tượng & Collection 22
23. Một số namespaces thông dụng
Các kiểu cơ bản thuộc namespaces System
System.Collections
System.Collections.Generic
System.IO
System.Windows.Forms
Namespaces
Một số namespaces thông dụng
Các kiểu cơ bản thuộc namespaces System
System.Collections
System.Collections.Generic
System.IO
System.Windows.Forms
Lập trình hướng đối tượng & Collection 23
24. Xem file NET35_Namespaces_Poster_LORES để biết
thêm về các lớp được các lớp được hỗ trợ bởi .NET 3.5
Xem 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
25. 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
26. Thuộc namespace System
Cú 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ặc
DateTime tenbien = DateTime.Parse (string)
Thuộc namespace System
Cú 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 AM
DateTime date1 = new DateTime(10, 01, 30);
//1/30/2010 2:15 PM
DateTime date2 = new DateTime(2010, 1, 30, 14, 15, 0);
//1/30/2010 12:00 AM
DateTime date3 = DateTime.Parse("01/30/10");
27. 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:35
DateTime ngayThangHienTai = DateTime.Today; //30/1/2010 12:00:00 AM
int thang = ngayThangHienTai.Day; //1
28. 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ỉ ra
có phải là năm nhuận hay không
DateTime tgianHienTai = DateTime.Now; //30/1/2010 10:26:35
DateTime tgianMoi = tgianHienTai.AddDays(60); //30/4/2010 10:26:35
29. 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
30. Demo sử dụng String
string chars = "abcdefg";
char a = chars[0]; //'a'
char b = chars[1]; //'b'
bool isStartWith = chars.StartsWith("abc"); //true
bool isEndWith = chars.EndsWith("abc"); //false
string tenCongTy = "Mike Murach and Associates";
int index1 = tenCongTy.IndexOf("Murach"); //5
int 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"); //true
bool isEndWith = chars.EndsWith("abc"); //false
string tenCongTy = "Mike Murach and Associates";
int index1 = tenCongTy.IndexOf("Murach"); //5
int index2 = tenCongTy.LastIndexOf(" "); //15
32. Cú pháp khai báo mảng một chiều
Ví dụ
Mảng
kieu[] tenMang;
tenMang = new kieu[chieuDaiMang]
//hoặc
keu[] tenMang = new kieu[chieuDaiMang]
int[] diem;
diem = new int[10];
//hoặc
int[] diem = new int[10];
//khai báo và khởi tạo giá trị cho mảng
int[] 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ặc
int[] diem = new int[10];
//khai báo và khởi tạo giá trị cho mảng
int[] diem3 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
33. 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
34. 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];
}
35. 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ảng
int[,] 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;
36. Mỗi mảng là một thể hiện của lớp Array
Lớp Array chứa các thuộc tính và phương thức để thao
tá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ủa
chiều được chỉ ra
Tham khảo thêm các thuộc tính và phương thức trên trang msdn
37. 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ếp
theo 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 theo
thứ 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);
38. Các lớp collection không định kiểu được lưu trữ trong
namespace System.Collections
Lưu trữ các kiểu khác nhau trong một collection
Các đối tượng khi lưu vào collection không định kiểu được
tự độ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 đầu
Thườ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ểm
nà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ữ trong
namespace System.Collections
Lưu trữ các kiểu khác nhau trong một collection
Các đối tượng khi lưu vào collection không định kiểu được
tự độ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 đầu
Thườ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ểm
nà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
40. 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ịch
int 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ịch
int 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;
}
41. Các lớp collection định kiểu được lưu trữ trong
namespace System.Collections.Generic
Lư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ữ trong
namespace System.Collections.Generic
Lư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 trang
http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx
42. 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ạy
int 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ạy
int sum = 0;
for (int i = 0; i < numbers.Count; i++)
{
int number = numbers[i];
sum += number;
}
43. TỰ SINH MÃ
KHAI BÁO
Lập trình hướng đối tượng & Collection 43
TỰ SINH MÃ
KHAI BÁO
44. Tự sinh mã là tính năng mới của Visual Studio 2010
Tính năng này sẽ tự sinh mã khai báo cho bạn khi cần
thiết
Bạn khai báo một đối tượng của lớp chưa định nghĩa
Tí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ĩa
Tí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 2010
Tính năng này sẽ tự sinh mã khai báo cho bạn khi cần
thiết
Bạn khai báo một đối tượng của lớp chưa định nghĩa
Tí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ĩa
Tí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
45. Khai báo đối tượng thuộc lớp KhachHang chưa được
định nghĩa
Demo sử dụng tính
năng tự sinh mã khai báo
Chọn
Generate 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
46. Gọi đến phương thức hienThiThongTin chưa được
định nghĩa
Demo sử dụng tính
năng tự sinh mã khai báo
Lập trình hướng đối tượng & Collection 46
Phương thức
hienThiThongTin
được tự động định nghĩa
47. 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ính
nă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ức
hienThiThongTin
được định nghĩa với hai tham số
48. Các khái niệm về lập trình hướng đối tượng và collection
trong C# giống hệt như trong Visual Basic, chỉ khác
nhau 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ương
thứ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ới
cá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 đối
tượ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à collection
trong C# giống hệt như trong Visual Basic, chỉ khác
nhau 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ương
thứ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ới
cá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 đối
tượ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
49. Collection được phân làm hai loại Collection định kiểu và
không định kiểu
Collection không định kiểu có thể lưu nhiều loại đối
tượng và collection, nhưng khi lưu sẽ chuyển các đối
tượng này về kiểu Object (boxing)
Collection định kiểu chỉ lưu một kiểu đã được định nghĩa
trước vào collection
Visual Studio 2010 cung cấp tính năng tự sinh mã khai
báo khi các biến hoặc phương thức được gọi chưa được
khai 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ểu
Collection không định kiểu có thể lưu nhiều loại đối
tượng và collection, nhưng khi lưu sẽ chuyển các đối
tượng này về kiểu Object (boxing)
Collection định kiểu chỉ lưu một kiểu đã được định nghĩa
trước vào collection
Visual Studio 2010 cung cấp tính năng tự sinh mã khai
báo khi các biến hoặc phương thức được gọi chưa được
khai báo trước đó
Lập trình hướng đối tượng & Collection 49