SlideShare a Scribd company logo
1 of 30
Download to read offline
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
1
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khái niệm lớp giao tiếp
• Kh i bá à khởi t lớ i tiế• Khai báo và khởi tạo lớp giao tiếp
2
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khái niệm lớp giao tiếp
Khai báo 1 tập các thành phần (thuộc tính phương thức)− Khai báo 1 tập các thành phần (thuộc tính, phương thức)
• chỉ khai báo, nhưng không thực thi
− Các lớp thực thi interface phải cung cấp định nghĩa các
ầthành phần mà interface khai báo
− Interface là một kiểu tham chiếu (reference type)
3
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khái niệm lớp giao tiếp
Ví dụ: Interface IComparable− Ví dụ: Interface IComparable
public interface IComparable{
Keywork Tên interface
public interface IComparable{
int CompareTo(object obj);
}
Sự thực thi được
thay thế bằng ;
4
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khái niệm lớp giao tiếp
Interface ICompareable− Interface ICompareable
• Không thực thi phương thức CompareTo
• Cung cấp mô tả chức năng phương thức CompareTo
• Khi gọi, CompareTo trả về các giá trị:
–– < 0: đối tượng hiện hành < đối tượng truyền vào< 0: đối tượng hiện hành < đối tượng truyền vào
–– > 0: đối tượng hiện hành > đối tượng truyền vào> 0: đối tượng hiện hành > đối tượng truyền vàoợ g ệ ợ g yợ g ệ ợ g y
–– = 0: đối tượng hiện hành = đối tượng truyền vào= 0: đối tượng hiện hành = đối tượng truyền vào
5
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khái niệm lớp giao tiếp
Ví dụ sử dụng IComparable− Ví dụ sử dụng IComparable.
// tạo mảng số nguyên
int[] myInt=new int[]{20,4,16,9,2};
Kiểu int thực thi
interface[] y []{ , , , , };
// sắp xếp các phần tử
Array.Sort(myInt);
// in kết quả
interface
IComparable
// q
foreach (int i in myInt)
Console.Write(“{0} ”,i);
6
2 4 9 16 20
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khái niệm lớp giao tiếp
− Ví dụ sử dụng IComparable.
// khai báo 1 lớp đơn giản
class MyClass{
bli i t Th V lpublic int TheValue;
}
// tạo mảng có 5 phần tử với lớp vừa tạo
Cl [] Cl [ ]MyClass[] mc=new MyClass[5];
// tạo và khởi gán các phần tử
…
ắ ế ả ERROR M Cl khô thự
7
// sắp xếp mảng
Array.Sort(mc);
ERROR : MyClass không thực
thi interface IComparable
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khái iệ lớ i iế• Khái niệm lớp giao tiếp
− Thực thi interface IComparable
• Khai báo interface khi khai báo lớpKhai báo interface khi khai báo lớp
• Cung cấp thực thi tất cả các thành phần của interface
trong khai báo lớp
l M Cl IC blclass MyClass : ICompareable
{
public int TheValue;
public int CompareTo(object obj){
Thực thi phương
thức CompareTo
public int CompareTo(object obj){
MyClass mc=(MyClass)obj;
if (this.TheValue<mc.TheValue) return -1;
if (this.TheValue>mc.TheValue) return 1;
et n 0
8
return 0;
}
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khái niệm lớp giao tiếp
var myInt=new []{20,4,16,9,2};
MyClass[] mc=new MyClass[5];
for (int i=0;i<5;i++){
mc[i]=new MyClass();y ()
mc[i].TheValue=myInt[i];
}
PrintOut(“Initial Order: “,mc);( , );
Array.Sort(mc);
PrintOut(“Sorted Order: “,mc);
9
Initial Order: 20 4 16 9 2
Sorted Order: 2 4 9 16 20
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khai báo và khởi tạo lớp giao tiếp
Các lưu ý khi khai báo interface− Các lưu ý khi khai báo interface
• Khai báo interface không chứa các thành phần dữ liệu
• Khai báo interface chỉ chứa các khai báo của các non-static
f ti bfunction member.
–– Phương thức (methods)Phương thức (methods)
–– Thuộc tính (properties)Thuộc tính (properties)
S kiệ ( )S kiệ ( )–– Sự kiện (events)Sự kiện (events)
–– Chỉ mục (indexers)Chỉ mục (indexers)
• Chỉ khai báo các thành phần, không khai báo code thực thi
10
• Tên interface nên bắt đầu bằng I (ví dụ IComparable)
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khai báo và khởi tạo lớp giao tiếp
interface MyInterface1{
int DoStuff(int nVar1 int nVar2);
public
− Ví dụ:
protectedprivateinternal
int DoStuff(int nVar1, int nVar2);
double DoOtherStuff(string s,long x);
}
public
????
− Khai báo interface có thể dùng các bổ từ truy xuất như
public, private, protected, internal.
− Các thành phần của interface mặc định là public và không
11
Các thành phần của interface mặc định là public và không
được dùng bổ từ truy xuất
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khai báo và khởi tạo lớp giao tiếp
Thực thi interface− Thực thi interface
• Chỉ có các class/ struct có thể thực thi interface
• Khi thực thi interface, các class/ struct phải
–– Thêm khai báo interface vào khai báo class/ structThêm khai báo interface vào khai báo class/ struct
–– Thực thi tất cả các thành phần của interface trong class/Thực thi tất cả các thành phần của interface trong class/
structstruct
12
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khai báo và khởi tạo lớp giao tiếp
fclass MyClass: MyInterface1{
int DoStuff(int nVar1, long nVar2){
// implement code
}
double DoOtherStuff(string s, long x){
// implement code
}
}
13
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Khai báo và khởi tạo lớp giao tiếp
− Lưu ý:
• Nếu một lớp thực thi interface, nó phải thực thi hết tất cả
các thành phần của interface
• Nếu lớp được dẫn xuất từ lớp cơ sở và có thực thi
interface : tên lớp cơ sở phải đặt trước các tên interface
trong khai báo lớp
class Derived: MyBaseClass, IIfc1, IEnumerable, IEnumerator
{
… Lớp cơ sở Interface
14
}
Lớp cơ sở Interface
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Interface là một kiểu tham chiếu (reference type)
Không thể truy xuất interface trực tiếp thông qua các thành phần− Không thể truy xuất interface trực tiếp thông qua các thành phần
của đối tượng thuộc lớp
− Có thể tham chiếu đến interface thông qua ép kiểu của đối
tượng thuộc lớp sang kiểu interfacetượng thuộc lớp sang kiểu interface
15
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Interface là một kiểu tham chiếu (reference type)
interface IIfc1{
void PrintOut(string s);( g );
}
class MyClass: IIfc1{
public void PrintOut(string s){
Console.WriteLine(“Calling through: {0}”,s);
}
}
…
MyClass mc=new MyClass();
mc.PrintOut(“Object”);
IIfc1 ifc=(IIfc1)mc;
Calling through: Object
Calling through: Interface
Ép kiểu
16
( ) ;
ifc.PrintOut(“Interface”);
… Toán tử .
Ép kiểu
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Sử dụng toán tử As với interface
− Ép kiểu một đối tượng sang kiểu interface mà nóÉp kiểu một đối tượng sang kiểu interface mà nó
không thực thi sẽ phát sinh ngoại lệ (lỗi)
− Sử dụng toán tử As:g
• Nếu lớp có thực thi interface: trả về tham chiếu đến
interface
• Nếu lớp không thực thi interface: trả về null (không phát• Nếu lớp không thực thi interface: trả về null (không phát
sinh ngoại lệ)
17
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Sử d t á tử A ới i t f• Sử dụng toán tử As với interface
interface IIfc1{
void PrintOut(string s);( g );
}
class MyClass: IIfc1{
public void PrintOut(string s){
Console.WriteLine(“Calling through: {0}”,s);
}
}
MyClass mc=new MyClass();MyClass mc=new MyClass();
IIfc1 ifc=mc as IIfc1;
if (ifc!=null)
ifc.PrintOut(“Interface”);
18
ifc.PrintOut( Interface );
else
Console.WriteLine(“Nothing”);
Calling through: Interface
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Sử d t á tử A ới i t f• Sử dụng toán tử As với interface
interface IIfc2{
void PrintOut(string s);( g );
}
class MyClass: IIfc1{
public void PrintOut(string s){
Console WriteLine(“Calling through: {0}” s);Console.WriteLine( Calling through: {0} ,s);
}
}
MyClass mc=new MyClass();
IIf 2 if IIf 2IIfc2 ifc=mc as IIfc2;
if (ifc!=null)
ifc.PrintOut(“Interface”);
else
19
else
Console.WriteLine(“Nothing”); Nothing
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Sử d t á tử A ới i t f• Sử dụng toán tử As với interface
interface IIfc2{
void PrintOut(string s);( g );
}
class MyClass: IIfc1{
public void PrintOut(string s){
Console WriteLine(“Calling through: {0}” s);Console.WriteLine( Calling through: {0} ,s);
}
}
MyClass mc=new MyClass();
IIf 2 if (IIf 2)
EXCEPTION
IIfc2 ifc=(IIfc2)mc;
if (ifc!=null)
ifc.PrintOut(“Interface”);
else
20
else
Console.WriteLine(“Nothing”);
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Thực thi nhiều interface
− Một class/ struct có thể thực thi nhiều interfaceMột class/ struct có thể thực thi nhiều interface
− Các interface được thực thi phải được liệt kê trên khai
báo lớp và cách nhau bởi dấu phẩy (“,”)p p y ( )
21
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Thực thi nhiều interface
interface IDataRetrieve { int GetData() ; }interface IDataRetrieve { int GetData() ; }
interface IDataStore { void SetData( int x ) ; }
class MyData: IDataRetrieve, IDataStore {
int Mem1;
public int GetData() { return Mem1 ; }public int GetData() { return Mem1 ; }
public void SetData( int x ) { Mem1 = x ; }
}
…
MyData data = new MyData();
data.SetData( 5 );
Console.WriteLine("Value = {0}", data.GetData());
22
…
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Thực thi interface với có thành phần giống
nhau
interface IIfc1{
void PrintOut(string s);
}
class MyClass: IIfc1, IIfc2{
// ??????
}
interface IIfc2{
void PrintOut(string t);
}
23
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Thực thi interface với có thành phần giống
nhau
class MyClass: IIfc1, IIfc2{
public void PrintOut(string s){
Console WriteLine(“Calling through: {0}” s);
1 Thực thi chung cho 2
phương thức giống nhau
Console.WriteLine( Calling through: {0} ,s);
}
}
…
MyClass mc=new MyClass();
mc.PrintOut(“Object”);
…
Calling through: Object
24
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Tham chiếu đến nhiều interface
interface IIfc1 { void PrintOut(string s); }
interface IIfc2 { void PrintOut(string s); }
class MyClass : IIfc1, IIfc2 {
public void PrintOut(string s)public void PrintOut(string s)
{
Console.WriteLine("Calling through: {0}", s);
}
}}
Ta có thể gọi phương thức PrintOut theo 3 cách:
• Từ đối tượng thuộc lớp MyClass
25
Từ đối tượng thuộc lớp MyClass
• Từ tham chiếu đến interface IIfc1
• Từ tham chiếu đến interface IIfc2
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Tham chiếu đến nhiều interface
MyClass mc = new MyClass();MyClass mc = new MyClass();
IIfc1 ifc1 = (IIfc1) mc; // Get ref to IIfc1
IIfc2 ifc2 = (IIfc2) mc; // Get ref to IIfc2
mc.PrintOut("object."); // Call through class object
ifc1.PrintOut("interface 1."); // Call through IIfc1
ifc2.PrintOut("interface 2."); // Call through IIfc2
26
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Kế thừa Interface
− Một interface có thể được kế thừa từ 1/nhiều interfaceMột interface có thể được kế thừa từ 1/nhiều interface
− Chỉ định 1 interface kế thừa từ các interface khác:
• Thêm danh sách các interface kế thừa vào khai báoThêm danh sách các interface kế thừa vào khai báo
interface
• Các interface cách nhau bởi dấu phẩy (,)
interface IDataIO : IDataRetrieve, IDataStore
{
...
27
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Kế thừ I t f• Kế thừa Interface
interface IDataRetrieve{
int GetData();
}
class Program{
static void Main(){
MyData data=new MyData();}
interface IDataStore{
void SetData(int s);
}
interface IDataIO: IDataRetrieve IDataStore{
MyData data=new MyData();
data.SetData(5);
Console.WriteLine(“{0}”,
data.GetData());
}interface IDataIO: IDataRetrieve, IDataStore{
}
class MyData: IDataIO{
int nPrivateData;
public int GetData(){
}
}
public int GetData(){
return nPrivateData;
}
public void SetData(int x){
nPrivateData=x;
28
nPrivateData=x;
}
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 7: Interface
• Nhiề lớ th thi i t f• Nhiều lớp thực thi interface
interface ILiveBirth{
string BabyCalled();
}
Animal[] animalArray = new Animal[3];
animalArray[0] = new Cat();
animalArray[1] = new Bird();}
class Animal {
}
class Cat : Animal, ILiveBirth{
string ILiveBirth BabyCalled(){
animalArray[1] = new Bird();
animalArray[2] = new Dog();
foreach( Animal a in animalArray ){
ILiveBirth b = a as ILiveBirth;
if (b != null)string ILiveBirth.BabyCalled(){
return "kitten";
}
}
class Dog : Animal ILiveBirth {
if (b != null)
Console.WriteLine("Baby is called:
{0}", b.BabyCalled());
}
class Dog : Animal, ILiveBirth {
string ILiveBirth.BabyCalled(){
return "puppy";
}
}
29
}
class Bird : Animal{
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
End
Thanks
30

More Related Content

What's hot

Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.commai_non
 
Cs lab04 win-form assignment
Cs lab04   win-form assignmentCs lab04   win-form assignment
Cs lab04 win-form assignmentHoangbach Nguyen
 
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Thanh Giảng Lê
 
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]bookbooming1
 
Lập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệLập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệTrần Thiên Đại
 
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Thanh Minh Hoang
 
Bai5kethuadahinh 130622091400-phpapp02
Bai5kethuadahinh 130622091400-phpapp02Bai5kethuadahinh 130622091400-phpapp02
Bai5kethuadahinh 130622091400-phpapp02Hoàng Hà
 
Pplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09aPplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09aPix Nhox
 
1. giới thiệu về ng￴n ngữ lập trình c#
1. giới thiệu về ng￴n ngữ lập trình c#1. giới thiệu về ng￴n ngữ lập trình c#
1. giới thiệu về ng￴n ngữ lập trình c#Duy Lê Văn
 

What's hot (17)

Oop 2
Oop 2Oop 2
Oop 2
 
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
 
Phạm văn ất
Phạm văn ấtPhạm văn ất
Phạm văn ất
 
Chuong6 (2)
Chuong6 (2)Chuong6 (2)
Chuong6 (2)
 
C# cơ bản hay
C# cơ bản hayC# cơ bản hay
C# cơ bản hay
 
Cs lab04 win-form assignment
Cs lab04   win-form assignmentCs lab04   win-form assignment
Cs lab04 win-form assignment
 
Oop 7
Oop 7Oop 7
Oop 7
 
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
 
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
 
Lập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệLập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất Nghệ
 
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
Một số vấn đề thường gặp trong lập trình - Đăng Bình Phương (ĐH KHTN)
 
Bai5kethuadahinh 130622091400-phpapp02
Bai5kethuadahinh 130622091400-phpapp02Bai5kethuadahinh 130622091400-phpapp02
Bai5kethuadahinh 130622091400-phpapp02
 
Chuong 4
Chuong 4Chuong 4
Chuong 4
 
Pplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09aPplthdt c01 phong_cachlaptrinh_v13.09a
Pplthdt c01 phong_cachlaptrinh_v13.09a
 
1. giới thiệu về ng￴n ngữ lập trình c#
1. giới thiệu về ng￴n ngữ lập trình c#1. giới thiệu về ng￴n ngữ lập trình c#
1. giới thiệu về ng￴n ngữ lập trình c#
 
Chuong3 c
Chuong3 c Chuong3 c
Chuong3 c
 
Chuong8 (2)
Chuong8 (2)Chuong8 (2)
Chuong8 (2)
 

Similar to Bai06interface 130622091935-phpapp02

Phan 2 chuong 9 (cau truc)
Phan 2   chuong 9 (cau truc)Phan 2   chuong 9 (cau truc)
Phan 2 chuong 9 (cau truc)Trần Văn Nam
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modulesTrần Văn Nam
 
Bài tập nhập môn lập trình
Bài tập nhập môn lập trìnhBài tập nhập môn lập trình
Bài tập nhập môn lập trìnhHuy Rùa
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfHiNht6
 
Mock object
Mock objectMock object
Mock objectlvlong
 
De tai he dieu hanh nam 2010 2011
De tai he dieu hanh nam 2010 2011De tai he dieu hanh nam 2010 2011
De tai he dieu hanh nam 2010 2011Hoang Nguyen
 
10. C - Function And Operator Overload
10. C   - Function And Operator Overload10. C   - Function And Operator Overload
10. C - Function And Operator OverloadDarian Pruitt
 
Giáo trình vb.net
Giáo trình vb.netGiáo trình vb.net
Giáo trình vb.netHung Pham
 
Bai3cautrucdieukhien 130622085309-phpapp02
Bai3cautrucdieukhien 130622085309-phpapp02Bai3cautrucdieukhien 130622085309-phpapp02
Bai3cautrucdieukhien 130622085309-phpapp02Tiểu Sương Lãnh
 
Ccb 2007 bai01-tong quan ve csdl access
Ccb 2007 bai01-tong quan ve csdl accessCcb 2007 bai01-tong quan ve csdl access
Ccb 2007 bai01-tong quan ve csdl accesshuongphan3991
 

Similar to Bai06interface 130622091935-phpapp02 (20)

Lesson09
Lesson09Lesson09
Lesson09
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
Phan 2 chuong 9 (cau truc)
Phan 2   chuong 9 (cau truc)Phan 2   chuong 9 (cau truc)
Phan 2 chuong 9 (cau truc)
 
Oop 8
Oop 8Oop 8
Oop 8
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
 
Oop 0
Oop 0Oop 0
Oop 0
 
Bài tập nhập môn lập trình
Bài tập nhập môn lập trìnhBài tập nhập môn lập trình
Bài tập nhập môn lập trình
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdf
 
Mock object
Mock objectMock object
Mock object
 
De tai he dieu hanh nam 2010 2011
De tai he dieu hanh nam 2010 2011De tai he dieu hanh nam 2010 2011
De tai he dieu hanh nam 2010 2011
 
10. C - Function And Operator Overload
10. C   - Function And Operator Overload10. C   - Function And Operator Overload
10. C - Function And Operator Overload
 
Giáo trình vb.net
Giáo trình vb.netGiáo trình vb.net
Giáo trình vb.net
 
Lesson07
Lesson07Lesson07
Lesson07
 
Lesson07
Lesson07Lesson07
Lesson07
 
Phan 1 sv
Phan 1   svPhan 1   sv
Phan 1 sv
 
Bai3cautrucdieukhien 130622085309-phpapp02
Bai3cautrucdieukhien 130622085309-phpapp02Bai3cautrucdieukhien 130622085309-phpapp02
Bai3cautrucdieukhien 130622085309-phpapp02
 
C9 templates
C9 templatesC9 templates
C9 templates
 
C9 templates
C9 templatesC9 templates
C9 templates
 
Lập trình hướng đối tượng - p2
Lập trình hướng đối tượng - p2Lập trình hướng đối tượng - p2
Lập trình hướng đối tượng - p2
 
Ccb 2007 bai01-tong quan ve csdl access
Ccb 2007 bai01-tong quan ve csdl accessCcb 2007 bai01-tong quan ve csdl access
Ccb 2007 bai01-tong quan ve csdl access
 

Bai06interface 130622091935-phpapp02

  • 1. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC 1
  • 2. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khái niệm lớp giao tiếp • Kh i bá à khởi t lớ i tiế• Khai báo và khởi tạo lớp giao tiếp 2
  • 3. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khái niệm lớp giao tiếp Khai báo 1 tập các thành phần (thuộc tính phương thức)− Khai báo 1 tập các thành phần (thuộc tính, phương thức) • chỉ khai báo, nhưng không thực thi − Các lớp thực thi interface phải cung cấp định nghĩa các ầthành phần mà interface khai báo − Interface là một kiểu tham chiếu (reference type) 3
  • 4. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khái niệm lớp giao tiếp Ví dụ: Interface IComparable− Ví dụ: Interface IComparable public interface IComparable{ Keywork Tên interface public interface IComparable{ int CompareTo(object obj); } Sự thực thi được thay thế bằng ; 4
  • 5. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khái niệm lớp giao tiếp Interface ICompareable− Interface ICompareable • Không thực thi phương thức CompareTo • Cung cấp mô tả chức năng phương thức CompareTo • Khi gọi, CompareTo trả về các giá trị: –– < 0: đối tượng hiện hành < đối tượng truyền vào< 0: đối tượng hiện hành < đối tượng truyền vào –– > 0: đối tượng hiện hành > đối tượng truyền vào> 0: đối tượng hiện hành > đối tượng truyền vàoợ g ệ ợ g yợ g ệ ợ g y –– = 0: đối tượng hiện hành = đối tượng truyền vào= 0: đối tượng hiện hành = đối tượng truyền vào 5
  • 6. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khái niệm lớp giao tiếp Ví dụ sử dụng IComparable− Ví dụ sử dụng IComparable. // tạo mảng số nguyên int[] myInt=new int[]{20,4,16,9,2}; Kiểu int thực thi interface[] y []{ , , , , }; // sắp xếp các phần tử Array.Sort(myInt); // in kết quả interface IComparable // q foreach (int i in myInt) Console.Write(“{0} ”,i); 6 2 4 9 16 20
  • 7. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khái niệm lớp giao tiếp − Ví dụ sử dụng IComparable. // khai báo 1 lớp đơn giản class MyClass{ bli i t Th V lpublic int TheValue; } // tạo mảng có 5 phần tử với lớp vừa tạo Cl [] Cl [ ]MyClass[] mc=new MyClass[5]; // tạo và khởi gán các phần tử … ắ ế ả ERROR M Cl khô thự 7 // sắp xếp mảng Array.Sort(mc); ERROR : MyClass không thực thi interface IComparable
  • 8. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khái iệ lớ i iế• Khái niệm lớp giao tiếp − Thực thi interface IComparable • Khai báo interface khi khai báo lớpKhai báo interface khi khai báo lớp • Cung cấp thực thi tất cả các thành phần của interface trong khai báo lớp l M Cl IC blclass MyClass : ICompareable { public int TheValue; public int CompareTo(object obj){ Thực thi phương thức CompareTo public int CompareTo(object obj){ MyClass mc=(MyClass)obj; if (this.TheValue<mc.TheValue) return -1; if (this.TheValue>mc.TheValue) return 1; et n 0 8 return 0; } }
  • 9. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khái niệm lớp giao tiếp var myInt=new []{20,4,16,9,2}; MyClass[] mc=new MyClass[5]; for (int i=0;i<5;i++){ mc[i]=new MyClass();y () mc[i].TheValue=myInt[i]; } PrintOut(“Initial Order: “,mc);( , ); Array.Sort(mc); PrintOut(“Sorted Order: “,mc); 9 Initial Order: 20 4 16 9 2 Sorted Order: 2 4 9 16 20
  • 10. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khai báo và khởi tạo lớp giao tiếp Các lưu ý khi khai báo interface− Các lưu ý khi khai báo interface • Khai báo interface không chứa các thành phần dữ liệu • Khai báo interface chỉ chứa các khai báo của các non-static f ti bfunction member. –– Phương thức (methods)Phương thức (methods) –– Thuộc tính (properties)Thuộc tính (properties) S kiệ ( )S kiệ ( )–– Sự kiện (events)Sự kiện (events) –– Chỉ mục (indexers)Chỉ mục (indexers) • Chỉ khai báo các thành phần, không khai báo code thực thi 10 • Tên interface nên bắt đầu bằng I (ví dụ IComparable)
  • 11. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khai báo và khởi tạo lớp giao tiếp interface MyInterface1{ int DoStuff(int nVar1 int nVar2); public − Ví dụ: protectedprivateinternal int DoStuff(int nVar1, int nVar2); double DoOtherStuff(string s,long x); } public ???? − Khai báo interface có thể dùng các bổ từ truy xuất như public, private, protected, internal. − Các thành phần của interface mặc định là public và không 11 Các thành phần của interface mặc định là public và không được dùng bổ từ truy xuất
  • 12. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khai báo và khởi tạo lớp giao tiếp Thực thi interface− Thực thi interface • Chỉ có các class/ struct có thể thực thi interface • Khi thực thi interface, các class/ struct phải –– Thêm khai báo interface vào khai báo class/ structThêm khai báo interface vào khai báo class/ struct –– Thực thi tất cả các thành phần của interface trong class/Thực thi tất cả các thành phần của interface trong class/ structstruct 12
  • 13. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khai báo và khởi tạo lớp giao tiếp fclass MyClass: MyInterface1{ int DoStuff(int nVar1, long nVar2){ // implement code } double DoOtherStuff(string s, long x){ // implement code } } 13
  • 14. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Khai báo và khởi tạo lớp giao tiếp − Lưu ý: • Nếu một lớp thực thi interface, nó phải thực thi hết tất cả các thành phần của interface • Nếu lớp được dẫn xuất từ lớp cơ sở và có thực thi interface : tên lớp cơ sở phải đặt trước các tên interface trong khai báo lớp class Derived: MyBaseClass, IIfc1, IEnumerable, IEnumerator { … Lớp cơ sở Interface 14 } Lớp cơ sở Interface
  • 15. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Interface là một kiểu tham chiếu (reference type) Không thể truy xuất interface trực tiếp thông qua các thành phần− Không thể truy xuất interface trực tiếp thông qua các thành phần của đối tượng thuộc lớp − Có thể tham chiếu đến interface thông qua ép kiểu của đối tượng thuộc lớp sang kiểu interfacetượng thuộc lớp sang kiểu interface 15
  • 16. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Interface là một kiểu tham chiếu (reference type) interface IIfc1{ void PrintOut(string s);( g ); } class MyClass: IIfc1{ public void PrintOut(string s){ Console.WriteLine(“Calling through: {0}”,s); } } … MyClass mc=new MyClass(); mc.PrintOut(“Object”); IIfc1 ifc=(IIfc1)mc; Calling through: Object Calling through: Interface Ép kiểu 16 ( ) ; ifc.PrintOut(“Interface”); … Toán tử . Ép kiểu
  • 17. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Sử dụng toán tử As với interface − Ép kiểu một đối tượng sang kiểu interface mà nóÉp kiểu một đối tượng sang kiểu interface mà nó không thực thi sẽ phát sinh ngoại lệ (lỗi) − Sử dụng toán tử As:g • Nếu lớp có thực thi interface: trả về tham chiếu đến interface • Nếu lớp không thực thi interface: trả về null (không phát• Nếu lớp không thực thi interface: trả về null (không phát sinh ngoại lệ) 17
  • 18. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Sử d t á tử A ới i t f• Sử dụng toán tử As với interface interface IIfc1{ void PrintOut(string s);( g ); } class MyClass: IIfc1{ public void PrintOut(string s){ Console.WriteLine(“Calling through: {0}”,s); } } MyClass mc=new MyClass();MyClass mc=new MyClass(); IIfc1 ifc=mc as IIfc1; if (ifc!=null) ifc.PrintOut(“Interface”); 18 ifc.PrintOut( Interface ); else Console.WriteLine(“Nothing”); Calling through: Interface
  • 19. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Sử d t á tử A ới i t f• Sử dụng toán tử As với interface interface IIfc2{ void PrintOut(string s);( g ); } class MyClass: IIfc1{ public void PrintOut(string s){ Console WriteLine(“Calling through: {0}” s);Console.WriteLine( Calling through: {0} ,s); } } MyClass mc=new MyClass(); IIf 2 if IIf 2IIfc2 ifc=mc as IIfc2; if (ifc!=null) ifc.PrintOut(“Interface”); else 19 else Console.WriteLine(“Nothing”); Nothing
  • 20. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Sử d t á tử A ới i t f• Sử dụng toán tử As với interface interface IIfc2{ void PrintOut(string s);( g ); } class MyClass: IIfc1{ public void PrintOut(string s){ Console WriteLine(“Calling through: {0}” s);Console.WriteLine( Calling through: {0} ,s); } } MyClass mc=new MyClass(); IIf 2 if (IIf 2) EXCEPTION IIfc2 ifc=(IIfc2)mc; if (ifc!=null) ifc.PrintOut(“Interface”); else 20 else Console.WriteLine(“Nothing”);
  • 21. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Thực thi nhiều interface − Một class/ struct có thể thực thi nhiều interfaceMột class/ struct có thể thực thi nhiều interface − Các interface được thực thi phải được liệt kê trên khai báo lớp và cách nhau bởi dấu phẩy (“,”)p p y ( ) 21
  • 22. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Thực thi nhiều interface interface IDataRetrieve { int GetData() ; }interface IDataRetrieve { int GetData() ; } interface IDataStore { void SetData( int x ) ; } class MyData: IDataRetrieve, IDataStore { int Mem1; public int GetData() { return Mem1 ; }public int GetData() { return Mem1 ; } public void SetData( int x ) { Mem1 = x ; } } … MyData data = new MyData(); data.SetData( 5 ); Console.WriteLine("Value = {0}", data.GetData()); 22 …
  • 23. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Thực thi interface với có thành phần giống nhau interface IIfc1{ void PrintOut(string s); } class MyClass: IIfc1, IIfc2{ // ?????? } interface IIfc2{ void PrintOut(string t); } 23
  • 24. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Thực thi interface với có thành phần giống nhau class MyClass: IIfc1, IIfc2{ public void PrintOut(string s){ Console WriteLine(“Calling through: {0}” s); 1 Thực thi chung cho 2 phương thức giống nhau Console.WriteLine( Calling through: {0} ,s); } } … MyClass mc=new MyClass(); mc.PrintOut(“Object”); … Calling through: Object 24
  • 25. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Tham chiếu đến nhiều interface interface IIfc1 { void PrintOut(string s); } interface IIfc2 { void PrintOut(string s); } class MyClass : IIfc1, IIfc2 { public void PrintOut(string s)public void PrintOut(string s) { Console.WriteLine("Calling through: {0}", s); } }} Ta có thể gọi phương thức PrintOut theo 3 cách: • Từ đối tượng thuộc lớp MyClass 25 Từ đối tượng thuộc lớp MyClass • Từ tham chiếu đến interface IIfc1 • Từ tham chiếu đến interface IIfc2
  • 26. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Tham chiếu đến nhiều interface MyClass mc = new MyClass();MyClass mc = new MyClass(); IIfc1 ifc1 = (IIfc1) mc; // Get ref to IIfc1 IIfc2 ifc2 = (IIfc2) mc; // Get ref to IIfc2 mc.PrintOut("object."); // Call through class object ifc1.PrintOut("interface 1."); // Call through IIfc1 ifc2.PrintOut("interface 2."); // Call through IIfc2 26
  • 27. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Kế thừa Interface − Một interface có thể được kế thừa từ 1/nhiều interfaceMột interface có thể được kế thừa từ 1/nhiều interface − Chỉ định 1 interface kế thừa từ các interface khác: • Thêm danh sách các interface kế thừa vào khai báoThêm danh sách các interface kế thừa vào khai báo interface • Các interface cách nhau bởi dấu phẩy (,) interface IDataIO : IDataRetrieve, IDataStore { ... 27 }
  • 28. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Kế thừ I t f• Kế thừa Interface interface IDataRetrieve{ int GetData(); } class Program{ static void Main(){ MyData data=new MyData();} interface IDataStore{ void SetData(int s); } interface IDataIO: IDataRetrieve IDataStore{ MyData data=new MyData(); data.SetData(5); Console.WriteLine(“{0}”, data.GetData()); }interface IDataIO: IDataRetrieve, IDataStore{ } class MyData: IDataIO{ int nPrivateData; public int GetData(){ } } public int GetData(){ return nPrivateData; } public void SetData(int x){ nPrivateData=x; 28 nPrivateData=x; } }
  • 29. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC Bài 7: Interface • Nhiề lớ th thi i t f• Nhiều lớp thực thi interface interface ILiveBirth{ string BabyCalled(); } Animal[] animalArray = new Animal[3]; animalArray[0] = new Cat(); animalArray[1] = new Bird();} class Animal { } class Cat : Animal, ILiveBirth{ string ILiveBirth BabyCalled(){ animalArray[1] = new Bird(); animalArray[2] = new Dog(); foreach( Animal a in animalArray ){ ILiveBirth b = a as ILiveBirth; if (b != null)string ILiveBirth.BabyCalled(){ return "kitten"; } } class Dog : Animal ILiveBirth { if (b != null) Console.WriteLine("Baby is called: {0}", b.BabyCalled()); } class Dog : Animal, ILiveBirth { string ILiveBirth.BabyCalled(){ return "puppy"; } } 29 } class Bird : Animal{ }
  • 30. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC End Thanks 30