public string petName; public int currSpeed; // A custom default constructor.. static Constructorsis executed when one of the following occurs: ➤ An instance of the class containing t
Trang 1Xây dưng lơp va giao diên ̣ ́ ̀ ̣
Xây dưng lơp va giao diên ̣ ́ ̀ ̣
Trang 2N i dung ộ
N i dung ộ
Lâp trinh h ̣ ̀ ướ ng đôi t ́ ượ ng la gi? ̀ ̀
Khai báo l p ớ
Khai bao interface ́
Constructor & destructor
Trang 4Apress-Accelerated C# 2008
Trang 5Object-oriented Programming (OOP)
Ky thuât lâp trinh truyên thông ( procedural ̃ ̣ ̣ ̀ ̀ ́
Trang 6 The type of an object is known by a special
name in OOP, its class
You can use class definitions to instantiate
objects, which means creating a real, named instance of a class
Trang 7Câu truc cua object ́ ́ ̉
Câu truc cua object ́ ́ ̉
Môt object gôm co: ̣ ̀ ́
Field
Method
Trang 8Life Cycle of an Object
➤ Construction: đôi t ́ ượ ng cân đ ̀ ượ c kh i tao, va đ ở ̣ ̀ ượ c th c ự thi b i ham constructor ở ̀
➤ Destruction: khi đôi t ́ ượ ng bi huy bo, 1 sô nhiêm vu clean- ̣ ̉ ̉ ́ ̣ ̣
up cân đ ̀ ượ c th c thi đê giai phong bô nh ự ̉ ̉ ́ ̣ ớ ham ̀
destructor.
Trang 10Khóa truy xu t cho class ấ
Khóa truy xu t cho class ấ
(Access modifier)
M t class ch có 2 khóa truy xu t ộ ỉ ấ
Internal: ch cho phép s d ng bên trong project ỉ ử ụ hiên hanh (default) ̣ ̀
internal class MyClass {
Trang 11Interface la gi? ̀ ̀
Interface la gi? ̀ ̀
Interface la 1 tâp h p cac method va property điên hinh ̀ ̣ ợ ́ ̀ ̉ ̀
chung nao đo đ ̀ ́ ượ c nhom lai cung nhau đê đong goi ́ ̣ ̀ ̉ ́ ́
(encapsulate) 1 ch c năng nao đo ứ ̀ ́
Interface không ch a ma đê th c thi, no chi đinh nghia ứ ̃ ̉ ự ́ ̉ ̣ ̃
cac thanh phân cua chinh no ́ ̀ ̀ ̉ ́ ́
Sau khi đinh nghia interface, co thê th c thi no trong 1 ̣ ̃ ́ ̉ ự ́
class class se hô tr (support) moi property va thanh ̃ ̃ ợ ̣ ̀ ̀
phân đ ̀ ượ c xac đinh trong interface ́ ̣
1 interface (‘‘instantiate an interface’’)
Trang 12Biêu diên interface băng UML ̉ ̃ ̀
Biêu diên interface băng UML ̉ ̃ ̀
Trang 13Khai bao interface ́
Khai bao interface ́
Khai bao interface cung t ́ ̃ ươ ng t nh khai bao l p: ự ư ́ ớ
interface IMyInterface {
// Interface members.
}
Cac khoa truy xuât: internal (default), public, không ́ ́ ́
đ ượ c phep dung astract hay sealed ́ ̀
Tinh kê th a cua interface cung t ́ ́ ừ ̉ ̃ ươ ng t nh tinh ự ư ́
kê th a cua class ́ ừ ̉
public interface IMyInterface : IMyBaseInterface, IMyBaseInterface2
{
// Interface members.
}
Trang 14So sanh Interface va class ́ ̀
So sanh Interface va class ́ ̀
Tât ca class đêu kê th a t l p c s System.Object theo ́ ̉ ̀ ́ ừ ừ ớ ơ ở
Interfaces không phai la class, vi vây không kê th a t ̉ ̀ ̀ ̣ ́ ừ ừ
System.Object
Không thê kh i tao (instantiate) môt interface nh kh i tao ̉ ở ̣ ̣ ư ở ̣
1 class
Trang 16 Co cung tên v i class, co thê không co tham sô nao ́ ̀ ớ ́ ̉ ́ ́ ̀
(parameter) va không tra vê bât ky gia tri nao (kê ca void) ̀ ̉ ̀ ́ ̀ ́ ̣ ̀ ̉ ̉
Môi class phai co it nhât 1 constructor Nêu ban không tao ̃ ̉ ́ ́ ́ ́ ̣ ̣ constructor cho 1 class thi compiler se t đông phat ra 1 ̉ ̃ ự ̣ ́ default constructor
Cho phép overload constructor đ t o ra nhi u cách ể ạ ề
kh i t o đ i t ở ạ ố ượ ng
Trang 17Phân loai Constructor ̣
Không có tham s ố
Kh i t o đ i t ở ạ ố ượ ng t class khi ch a bi t thông tin gì v nó ừ ư ế ề
Tham s vào là đ i t ố ố ượ ng cùng l p ớ
T o ra đôi t ạ ́ ượ ng nh b n sao c a đôi t ư ả ủ ́ ượ ng đ u vào ầ
Có m t hay nhi u tham s vào ộ ề ố
T o đôi t ạ ́ ươ ng khi bi t m t s thông tin nào v nó ế ộ ố ề
Trang 18(t o h c sinh khi bi t h tên) ạ ọ ế ọ
Trang 20class Car
{
// The 'state' of the Car.
public string petName;
public int currSpeed;
// A custom default constructor.
// Here, currSpeed will receive the
// default value of an int (zero).
public Car(string pn)
{
petName = pn;
}
// Let caller set the full 'state' of the Car.
public Car(string pn, int cs)
Trang 21Th t th c thi cac constructor ứ ự ự ́
Th t th c thi cac constructor ứ ự ự ́
In C#, constructors are called using the new
keyword
Khi l p dân xuât đ ớ ̃ ́ ượ c kh i tao, l p c s cua no ở ̣ ớ ơ ở ̉ ́
cung phai đ ̃ ̉ ượ c kh i tao Va khi l p c s nay đ ở ̣ ̀ ớ ơ ở ̀ ượ c
kh i tao thi l p c s cua chinh no cung phai đ ở ̣ ̀ ớ ơ ở ̉ ́ ́ ̃ ̉ ượ c
kh i tao va c thê cho đên khi tiên đên l p ở ̣ ̀ ứ ́ ́ ́ ́ ớ
System.Object
Trang 22public MyDerivedClass(int i) {
Trang 23Vi du 1 ́ ̣
Vi du 1 ́ ̣
Co thê kh i tao MyDerivedClass nh sau: ́ ̉ ở ̣ ư
MyDerivedClass myObj = new MyDerivedClass();
Chuôi s kiên sau se lân l ̃ ự ̣ ̃ ̀ ượ t th c hiên: ự ̣
➤ The System.Object.Object constructor will execute.
➤ The MyBaseClass.MyBaseClass() constructor will
execute.
➤ The MyDerivedClass.MyDerivedClass() constructor will execute
Trang 24Vi du 2 ́ ̣
Vi du 2 ́ ̣
MyDerivedClass myObj = new MyDerivedClass(4, 8);
Chuôi cac constructor se lân l ̃ ́ ̃ ̀ ượ t th c hiên nh sau: ự ̣ ư
➤ The System.Object.Object constructor will execute.
➤ The MyBaseClass.MyBaseClass() constructor will
execute.
➤ The MyDerivedClass.MyDerivedClass(int i, int j)
constructor will execute.
Hay
➤ The System.Object.Object constructor will execute.
➤ The MyBaseClass.MyBaseClass(int i)constructor will
execute.
➤ The MyDerivedClass.MyDerivedClass(int i, int j)
Trang 25Constructor initializer
Co thê s dung constructor initializer đê xac đinh loai ́ ̉ ử ̣ ̉ ́ ̣ ̣
constructor nao cân th c hiên ̀ ̀ ự ̣
Vi du: xac đinh constructor cua l p c ban nao cân dung ́ ̣ ́ ̣ ̉ ớ ơ ̉ ̀ ̀ ̀ trong đinh nghia cua constructor cua l p suy dân (derived ̣ ̃ ̉ ̉ ớ ̃ class)
public class MyDerivedClass : MyBaseClass
Trang 26MyBaseClass you will receive a SystemOverflowException.
Trang 27static Constructors
Static constructor đ ượ c dung đê kh i đâu bât ky ̀ ̉ ở ̀ ́ ̀ gia tri static ( ́ ̣ static data) nao hay th c thi 1 hanh ̀ ự ̀ đông (action) chi ra 1 lân duy nhât cua 1 l p ̣ ̉ ̀ ́ ̉ ớ
Đ ượ c goi t đông tr ̣ ự ̣ ướ c khi 1 điên hinh cua l p ̉ ̀ ̉ ớ
đ ượ c tao hay bât ky static member nao đ ̣ ́ ̀ ̀ ượ c
tham chiêu ́
Môi class chi co thê co 1 constructor static ̃ ̉ ́ ̉ ́
Constructor static không ch a access modifier va ứ ̀ bât ky tham sô nao ́ ̀ ́ ̀
Constructor static chi th c thi đung 1 lân, bât kê ̉ ự ́ ̀ ́ ̉
co bao nhiêu đôi t ́ ́ ượ ng đ ượ c tao ra ̣
Trang 28static Constructors
is executed when one of the following occurs:
➤ An instance of the class containing the static
constructor is created.
➤ A static member of the class containing the static
constructor is accessed.
the class is instantiated or static members accessed No
matter how many instances of a class are created, its
static constructor will only be called once
All nonstatic constructors are also known as instance
constructors
Trang 29public class Bus
The Drive method invoked
Vi du 1 ́ ̣
Trang 30 Th c hi n nhi m v “clean” khi đ i t ự ệ ệ ụ ố ượ ng b h y ị ủ
Trùng tên l p và có d u “~” phía tr ớ ấ ướ c
Không có tham s và access modifier ố
M i l p ch có 1 destructor ỗ ớ ỉ
class HocSinh {
//
~HocSinh() {
siSo ;
} }
Trang 32Member definition
members of the class, including fields, methods, and
properties
Trang 33Access modifier or Accessibility
Levels
Access modifier đ ượ c dung đê han chê viêc truy xuât môt ̀ ̉ ̣ ́ ̣ ́ ̣ member nao đo cua class ̀ ́ ̉
Trang 34Field and constant
Fields đ ượ c khai bao t ́ ươ ng t nh khai bao biên nh ng ự ư ́ ́ ư phia tr ́ ướ c khai bao co thêm access modifiers ́ ́
public readonly int MyInt = 17;
public static int MyInt;
}
Trang 35t ượ ng bank account cân phai biêt sô d cua chinh no ̀ ̉ ́ ́ ư ̉ ́ ́
nh ng không cân phai biêt sô d cua cac đôi t ư ̀ ̉ ́ ́ ư ̉ ́ ́ ươ ng bank account khac ́
These attributes are not necessarily accessible directly.
Co thê dung ́ ̉ ̀ properties đê truy xuât đên cac thuôc tinh ̉ ́ ́ ́ ̣ ́
cua đôi t ̉ ́ ươ ng
Properties ch a ứ get accessors đê đoc gia tri t cac thuôc ̉ ̣ ́ ̣ ừ ́ ̣ tinh va ́ ̀ set accessors đê l u tr cac gia tri vao thuôc tinh ̉ ư ữ ́ ́ ̣ ̀ ̣ ́
Trang 37private string courseName;
public string CourseName
{
get
{ return courseName; } // end get
set
{ courseName = value; } // end set
} // end property CourseName
Trang 38} // end method DisplayMessage
} // end class GradeBook
Trang 41Defining Method
namespace QuanLyHocSinh {
class HocSinh {
//
} }
{ }
Tên Đ i s ố ố
Câu l nh tr k t qu ra ngoài ệ ả ế ả
Trang 42Static members
Cac thanh phân ( method, property hay field) cua 1 ́ ̀ ̀ ̉
class co thê la static ́ ̉ ̀
Static members đ ượ c dung chung cho cac điên hinh ̀ ́ ̉ ̀ cua 1 class ̉
Static properties va fields cho phep truy xuât d ̀ ́ ́ ữ
liêu hoan toan đôc lâp v i môi điên hinh cua ̣ ̀ ̀ ̣ ̣ ớ ̃ ̉ ̀ ̉ class
Static methods cho phep th c thi cac lênh liên ́ ự ́ ̣
quan đên loai class, không phu thuôc vao bât ky ́ ̣ ̣ ̣ ̀ ́ ̀ đôi t ́ ượ ng điên hinh nao Khi s dung static ̉ ̀ ̀ ử ̣
member, không cân kh i tao đôi t ̀ ở ̣ ́ ượ ng
Trang 43Static member
Vi du: cac method Console.WriteLine() va ́ ̣ ́ ̀
Convert.ToString() cua l p Console la static, do đo không ̉ ớ ̀ ́ cân tao cac điên hinh cua l p nay ma vân co thê s dung ̀ ̣ ́ ̉ ̀ ̉ ớ ̀ ̀ ̃ ́ ̉ ử ̣
đ ượ c method nay ̀
Trang 44Static and nonstatic Method
public class CSharp
{
public CSharp ( ) { . . .}
public static void StaticMethod( ) { . . .}
public void NonStaticMethod( ) { . . .}
}
public class Tester() {
CSharp cs = new CSharp( );
Truy c p qua tên l p: CSharp ậ ớ
Truy c p qua tên l p: CSharp ậ ớ
Trang 45// cs_static_keyword.cs
using System;
public class Employee
{
public string id;
public string name;
}
Trang 46class MainClass : Employee
{
static void Main()
{
Console.Write("Enter the employee's name: ");
string name = Console.ReadLine();
Console.Write("Enter the employee's ID: ");
string id = Console.ReadLine();
// Create and configure the employee object:
Employee e = new Employee(name, id);
Console.Write("Enter the current number of employees: ");
string n = Console.ReadLine();
Employee.employeeCounter = Int32.Parse(n);
Employee.AddEmployee();
Trang 47// Display the new information:
Trang 48Defining methods
➤ virtual —The method may be overridden.
➤ abstract —The method must be overridden in
nonabstract derived classes (only permitted
Trang 49T khoa “This” ừ ́
T khoa “This” ừ ́
Môi đôi t ̃ ́ ượ ng co thê tham chiêu đên chinh no ́ ̉ ́ ́ ́ ́ băng t khoa this ̀ ừ ́
Khi 1 method non-static cua 1 đôi t ̉ ́ ượ ng nao ̀
đo đ ́ ượ c goi, phân thân cua method nay ̣ ̀ ̉ ̀ s ử
dung ngâm đinh ̣ ̀ ̣ t khoa this đê tham chiêu ừ ́ ̉ ́
đên cac biên điên hinh va method khac cua ́ ́ ́ ̉ ̀ ̀ ́ ̉
đôi t ́ ượ ng
S dung t khoa this ử ̣ ừ ́ t ườ ng minh :
Khi cân phân biêt v i biên cuc bô ̀ ̣ ớ ́ ̣ ̣
Đê đinh nghia indexer ̉ ̣ ̃
Trang 50T khoa “This”: s dung ngâm đinh ừ ́ ử ̣ ̀ ̣
T khoa “This”: s dung ngâm đinh ừ ́ ử ̣ ̀ ̣
Line 36 uses the this reference implicitly to call the
same method
Trang 51T khoa “This”: s dung t ừ ́ ử ̣ ườ ng minh
T khoa “This”: s dung t ừ ́ ử ̣ ườ ng minh
Nêu method ch a 1 biên cuc bô (local ́ ứ ́ ̣ ̣ variable) cung tên v i field cua class, ̀ ớ ̉
method nay se tham chiêu đên biên ̀ ̃ ́ ́ ́
cuc bô h n la field đo ̣ ̣ ơ ̀ ́ biên cuc bô ́ ̣ ̣
se lam ân đi field trong pham vi cua ̃ ̀ ̉ ̣ ̉
method
Phai dung t khoa this t ̉ ̀ ừ ́ ườ ng minh đê ̉ tham chiêu đên field bi ân nay ́ ́ ̣ ̉ ̀
Trang 52Vi du s dung this t ́ ̣ ử ̣ ườ ng minh
Vi du s dung this t ́ ̣ ử ̣ ườ ng minh
Trang 53 Đinh nghia ̣ ̃ indexer cho phep tao class ́ ̣
nh mang ao ("virtual arrays“) ư ̉ ̉
Cac điên hinh cua l p co thê đ ́ ̉ ̀ ̉ ớ ́ ̉ ượ c truy xuât băng toan t truy xuât mang [ ] ́ ̀ ́ ử ́ ̉
Trang 54 Indexer co thê bao gôm ca chi sô nguyên ́ ̉ ̀ ̉ ̉ ́
(integer indices) va chi sô không nguyên (non- ̀ ̉ ́ integer indices)
Indexer đ ượ c đinh nghia nh cac property ̣ ̃ ư ́
trong class
Trang 55Đinh nghia indexer ̣ ̃
Đinh nghia indexer ̣ ̃
• Indexer an object to be indexed in the same way as an array
• Indexer modifier can be private, public, protected or internal
• The return type can be any valid C# types
• Indexers in C# must have at least one parameter Else the compiler will
generate a compilation error.
Trang 56Vi du vê indexer ́ ̣ ̀
Vi du vê indexer ́ ̣ ̀
L p Box biêu diên 1 box v i 3 chiêu length, width va ớ ̉ ̃ ớ ̀ ̀
height L p Box co 2 mang ớ ́ ̉
Mang ch a tên cac chiêu cua box (length, width va height) ̉ ứ ́ ̀ ̉ ̀
Mang ch a kich th ̉ ứ ́ ướ c môi chiêu ̃ ̀
Box đinh nghia 2 indexer, môi indexer đêu tra vê gia tri ̣ ̃ ̃ ̀ ̉ ̀ ́ ̣
double biêu diên kich th ̉ ̃ ́ ướ c cua môi chiêu ̉ ̃ ̀
Trang 57 Inheritance dung đê chi kha năng co thê s dung ̀ ̉ ̉ ̉ ́ ̉ ử ̣ lai (reuse) môt class đê tao ra 1 l p m i hâp thu ̣ ̣ ̉ ̣ ớ ớ ́ moi thanh phân cua l p cha va m rông thêm cac ̣ ̀ ̀ ̉ ớ ̀ ở ̣ ́ thanh phân va kha năng m i ̀ ̀ ̀ ̉ ớ
Nh kê th a, lâp trinh viên tiêt kiêm đ ờ ́ ừ ̣ ̀ ́ ̣ ượ c th i ờ
gian phat triên phân mêm ́ ̉ ̀ ̀
Existing class base class
New class derived class
Each derived class can become the base class for future derived classes
Trang 58 Class hierarchy băt đâu băng l p object, moi l p ́ ̀ ̀ ớ ̣ ớ khac đêu kê th a tr c tiêp hay gian tiêp t l p ́ ̀ ́ ừ ự ́ ́ ́ ừ ớ
gôc nay ́ ̀
Single inheritance (đ n kê th a): môt l p chi kê ơ ́ ừ ̣ ớ ̉ ́
th a tr c tiêp t 1 l p c s ừ ự ́ ừ ớ ơ ở
Multiple inheritance (đa kê th a): môt l p co thê ́ ừ ̣ ớ ́ ̉
kê th a tr c tiêp t nhiêu h n 1 l p c s ́ ừ ự ́ ừ ̀ ơ ớ ơ ở
C# không hô tr đa kê th a ̃ ợ ́ ừ
Trang 59Vi du vê inheritance ́ ̣ ̀
Vi du vê inheritance ́ ̣ ̀
Trang 60 Tinh kê th a xac đinh ngay trong đinh nghia class, ́ ́ ừ ́ ̣ ̣ ̃
băng cach đăt dâu : tiêp theo la tên l p c s (base ̀ ́ ̣ ́ ́ ̀ ớ ơ ở class)
public class MyClass : MyBase
{
// Class members.
}
Chi đ ̉ ượ c phep dung 1 l p c s trong đinh nghia ́ ̀ ớ ơ ở ̣ ̃
class cua C#; va nêu kê th a t l p abstract, phai ̉ ̀ ́ ́ ừ ừ ớ ̉
th c thi tât ca cac thanh phân abstract ( ngoai tr l p ự ́ ̉ ́ ̀ ̀ ̣ ừ ớ suy dân cung la l p abstract) ̃ ̃ ̀ ớ
Trang 61Môi quan hê gi a l p c s va l p dân ́ ̣ ữ ớ ơ ở ̀ ớ ̃
Môi quan hê gi a l p c s va l p dân ́ ̣ ữ ớ ơ ở ̀ ớ ̃
xuât ́
xuât ́
Cac method cua l p suy dân không thê truy ́ ̉ ớ ̃ ̉
xuât tr c tiêp cac ́ ự ́ ́ member private cua l p c ̉ ớ ơ
s ở
L p suy dân chi co thê thay đôi trang thai cac ớ ̃ ̉ ́ ̉ ̉ ̣ ́ ́ field private l p c s thông qua cac method ớ ơ ở ́ non- private hay property cua l p c s ̉ ớ ơ ở
Trang 63 Môt class co thê v a kê th a t l p c s hay v a t ̣ ́ ̉ ừ ́ ừ ừ ớ ơ ở ừ ừ
cac interface ́
Cac interface phai đ ́ ̉ ượ c đăt sau tên cac l p c s ̣ ́ ớ ơ ở
Đê phân cach dung dâu phây ̉ ́ ̀ ́ ̉
Trang 64Khai bao constructor cua l p suy ́ ̉ ớ
Khai bao constructor cua l p suy ́ ̉ ớ
dân ̃
dân ̃
Môi constructor cua l p suy dân phai goi t ̃ ̉ ớ ̃ ̉ ̣ ườ ng minh hay ngâm đinh constructor cua l p c s đê bao đam cac biên ̀ ̣ ̉ ớ ơ ở ̉ ̉ ̉ ́ ́ điên hinh đ ̉ ̀ ượ c kê th a t l p c s ́ ừ ừ ớ ơ ở
tham sô goi t ́ ̣ ườ ng minh constructor 5 tham sô cua l p c ́ ̉ ớ ơ sở
Trang 65Demo for inheritance
Vi du 1: khai bao l p CommissionEmployee, kê th a tr c ́ ̣ ́ ớ ́ ừ ự tiêp t l p object va khai bao cac field first name, last ́ ừ ớ ̀ ́ ́
sales amount đêu la ̀ ̀ private
th a l p CommissionEmployee Môt sô method cua l p ừ ớ ̣ ́ ̉ ớ
c s phai đ ơ ở ̉ ượ c khai bao t ́ ườ ng minh la virtual nêu chung ̀ ́ ́ cân đ ̀ ượ c override b i cac method trong l p dân xuât ở ́ ớ ̃ ́
Vi du 3: cac biên điên hinh cua l p c s ́ ̣ ́ ́ ̉ ̀ ̉ ớ ơ ở
CommissionEmployee đ ượ c khai bao la ́ ̀ protected, l p ớ
CommissionEmployee2 co thê truy xuât d liêu tr c tiêp ́ ̉ ́ ữ ̣ ự ́ CommissionEmployee classes contain identical
functionality, but we show how the class