Giao diện
¾Giao diện làmột dạng của lớp trừu tư u tượng
¾Chỉ cócác nguyên mẫu phương th u phương thức, thuộc
tính, chỉ mục, đư được khai báo trong giao diện.
¾Tất cảcác thành phần khai báo trong giao
diện mặc đ c định là public(nên không cótừ
khóa vềmức đ c độtruy cập trong khai báo các
thuộc tính vàphương th phương thức)
¾Khi một lớp kếthừa một giao diện ta nói rằng
lớp đ p đóthực thi (Implement) giao diện
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com1
Giao diện (Giao tiếp)
1
Interface
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com2
Interface
¾Giao diện là một dạng của lớp trừu tượng
¾Chỉ có các nguyên mẫu phương thức, thuộc
tính, chỉ mục, được khai báo trong giao diện.
¾Tất cả các thành phần khai báo trong giao
diện mặc định là public (nên không có từ
khóa về mức độ truy cập trong khai báo các
thuộc tính và phương thức)
¾Khi một lớp kế thừa một giao diện ta nói rằng
lớp đó thực thi (Implement) giao diện
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com3
Interface
¾Khi một lớp kế thừa một giao diện ta phải
thực thi tất cả các phương thức, thuộc tính…
khai báo trong giao diện đó.
¾Trong C# chỉ có kế thừa đơn
¾Muốn thực hiện đa kế thừa phải kế thừa
thông qua Interface, nói các khác Một lớp chỉ
có thể kế thừa 1 lớp khác, đồng thời kế thừa
nhiều giao diện (đây tạm gọi là đa kế thừa
trong C#)
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com4
Interface
¾Cú pháp tạo giao diện:
[MứcĐộTruyCập] Interface TênGiaoDiện [: GiaoDiệnCơ Sở]
{
/ / Nội dung giao diện
}
Trong đó:
[MứcĐộTruyCập] : thường là public;
[: GiaoDiệnCơ Sở] : danh sách các Interface khác mà nó kế
thừa, mỗi Interface các nhau bởi dấu phẩy (,)
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
VD:
5
public interface IPlayerManager
{
public void PlayMusic();
public void PauseMusic();
public void Stop();
public int OnOff // thuộc tính của Interface
{
get ;
}
}
// Error ?
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
VD:
6
public interface IPlayerManager
{
void PlayMusic();
void PauseMusic();
void Stop();
int OnOff // thuộc tính của Interface
{
get ;
}
}
// Error ?
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
VD:
7
public class Player : IPlayerManager
{ int _Switch;
public void PlayMusic()
{ Console.WriteLine(“Music is playing ”);
_Switch = 1 ;
}
public void PauseMusic()
{ Console.WriteLine(“Music is pause ”);
_Switch = 0 ;
}
public void Stop()
{ Console.WriteLine(“Music is stopped ”);
_Switch = -1 ;
}
} // Error ?
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
VD:
8
public class Player : IPlayerManager
{ int _Switch;
public void PlayMusic()
{ Console.WriteLine(“Music is playing ”);
_Switch = 1 ;
}
public void PauseMusic()
{ Console.WriteLine(“Music is pause ”);
_Switch = 0 ;
}
public void Stop()
{ Console.WriteLine(“Music is stop ”);
_Switch = -1 ;
}
public int OnOff
{
get { return _Switch ; }
}
}
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
VD: interface
1 - Creating an interface
2 - Interface Inheritance Demo
3 - Interfaces Inheriting Interfaces
4 - One interface can inherit another interface
5 - Inheritance from both class and interface
9
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
Hủy đối tượng (destructor)
¾ C# cũng hỗ trợ Destructor, nhưng chúng
không được dùng thường xuyên như
trong C++
¾Các đối tượng trong .NET và C# thì bị xoá
bởi bộ thu gom rác (garbage collection).
¾Destrutor được gọi tự động khi một đối
tượng bị huỷ.
¾Không nên thực thi Destructor nếu như
lớp đó không thực sự cần đến nó.
10
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
Hủy đối tượng (destructor)
¾Nếu một object thực thi Destructor, thì nó
sẽ gọi bộ thu gom rác của đối tượng đó.
¾Những object không có Destructor thì bị
xoá khỏi bộ nhớ trong một lần hoạt động
của bộ thu gom rác rác (garbage collection)
¾Object có Destructor thì nó sẽ qua hai
bước: lần đầu nó gọi Destructor mà không
xoá đối tượng, lần thứ hai mới thực sự xoá
đối tượng.
11
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
Ghi chú và cú pháp về destructor
¾Một lớp chỉ có 1 destructor.
¾Destructor không thể kế thừa hoặc là phương
thức chồng (override)
¾Destructor không cần gọi mà chúng được gọi
tự động
¾Cú pháp khai báo Destructor không có tham số
¾Cú pháp
~TênLớp()
{
// Thực hiện công việc dọn dẹp
}
12
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
Constructor vs Destructor
¾Số lượng phương thức?
¾Kế thừa ?
¾Cú pháp ?
¾Gọi thực thi ?
¾Nếu các lớp có Kế thừa
Constructor của lớp cơ sở thực thi TRƯỚC
Constructor lớp dẫn xuất, ngược lại
Destructor của lớp cơ sở thực thi SAU
Destructor lớp dẫn xuất
13
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
VD:
class LopA
{ public LopA() {
Console.WriteLine("Creating A");
}
~LopA()
{
Console.WriteLine("Destroying A");
}
}
class LopB : LopA
{
public LopB() {
Console.WriteLine("Creating B");
}
~LopB()
{
Console.WriteLine("Destroying B");
}
}
14
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
class LopC : LopB
{ public LopC() {
Console.WriteLine("Creating C");
}
~LopC ()
{
Console.WriteLine("Destroying C");
}
}
class Program
{ public static void Main()
{
LopC c = new LopC();
Console.WriteLine("Object Created ");
Console.WriteLine("Press enter to Destroy it");
Console.ReadLine();
c = null;
Console.Read();
}
} // Display ?
15
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
Màn hình xuất hiện của VD trên
Creating A
Creating B
Creating C
Object Created
Press enter to Destroy it
Destroying C
Destroying B
Destroying A
16
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
Hủy đối tượng (destructor)
¾ Thông qua giao diện IDisposable chúng ta
có thể hủy đối tượng không cần nữa bằng
cách gọi tường minh thông qua phương
thức Dispose() của giao diện IDisposable
public void Dispose()
{
// Thực hiện công việc dọn dẹp
// Yêu cầu bộ thu dọn GC trong thực hiện kết thúc
GC.SuppressFinalize( this );
}
VD: trang 62
17
OOP in C# - GV: Phạm Đình Sắc – sacvn@yahoo.com
Q&A
File đính kèm:
06_Interface.pdf

