Tải bản đầy đủ (.pdf) (20 trang)

Bài giảng Lập trình trên Windows: Chương 2 - Trần Minh Thái (Phần 2) - Trường Đại Học Quốc Tế Hồng Bàng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.22 MB, 20 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

<b>Lập trình Windows</b>



Chương 2. Ngơn ngữ lập trình C#


Phần 2



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

2


Interface



Property, Mảng và Indexer


Lớp Collection



</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3></div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

4


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

5


Khái niệm



Interface định nghĩa một

“giao kèo”

mà có thể được



hiện thực bởi các lớp



Một interface có thể chứa

các

methods, properties,



events, và indexers



Interface

khơng cung cấp các hiện thực

của các thành



viên nó định nghĩa



</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

6



Khai báo



Cú pháp



[attributes][modifiers]interface<InterfaceName>[:baseList]
{


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

7


Khai báo



interface IControl


{


void Paint();
}


• Tên Interface


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

8


Khai báo



• Danh sách thừa kế


• <sub>Interface chỉ có thể thừa kế từ các interface khác</sub>
• <sub>Interface có thể thực hiện đa thừa kế </sub>



interface IControl


{


void Paint();
}


interface ITextBox: IControl


{


void SetText(string text);
}


interface IListBox: IControl


{


void SetItems(string[] items);
}


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

9


Khai báo



Các thành phần bên trong interface



Phương thức


Property




Indexer


Event



<sub>Và các thành phần khác được thừa kế từ các interface</sub>



Nhận xét



• <sub>Khơng có field trong interface</sub>


• Khơng có constructor và destructor
• <sub>Khơng có kiểu lồng nhau</sub>


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

10


Hiện thực



• Quy tắc


• <sub>Một lớp có thể hiện thực một hay nhiều interface</sub>


• <sub>Khi một lớp cài đặt interface </sub><sub>phải cài đặt mọi thành viên trong các </sub>


interface đó


• Cách hiện thực


• <sub>Dùng thành viên public</sub>


• <sub>Hoặc chỉ rõ thành viên thuộc interface nào (tránh tạo thành viên </sub>



</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

11


Hiện thực



• Cú pháp


class Class<i>Name: InterfaceList</i>


{


<i>public</i> <type> InterfaceMember()
{…}


<type> InterfaceName.InterfaceMember()
{…}


</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

12


Hiện thực



interface IControl


{


void Paint();
}


interface IDataBound


{



void Bind(Binder b);
}


public class EditBox: IControl, IDataBound


{


public void Paint()


{



}


public void Bind(Binder b)


{


...
}


}


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

13


Hiện thực



• Khi một lớp hay một struct hiện thực một interface thì các



instances của lớp/struct đó có thể được chuyển ngầm định
sang kiểu interface đó


EditBox editBox = new EditBox();
editBox.Paint();


IControl control = editBox;


IDataBound dataBound = editBox;
control.Paint();


</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

14

Hiện thực


interface IControl
{
void Paint();

interface IDataBound
{


void Bind(Binder b);
}


public class EditBox: IControl, IDataBound


{


public void IControl.Paint() 
{




}


public void IDataBound.Bind(Binder b) 
{


...
}




</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

15


Hiện thực



• Chú ý: các thành viên hiện thực bằng cách 2 chỉ có thể truy


cập qua kiểu interface


EditBox editBox = new 
EditBox();


editBox.Paint(); 


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

16


Hiện thực



public interface IFile



{


   int DeleteFile();


   void DisplayFile();


}


public class MyFile : IFile


{


   <i>public</i> int DeleteFile()


   {


      Console.WriteLine("DeleteFile Implementation!");


      return(0);


   }


<i> public</i> void DisplayFile()


   {


      Console.WriteLine("DisplayFile Implementation!");


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

17



Hiện thực



class InterfaceDemo


{


   public static void Main()
   {


       MyFile objMyFile = new MyFile(); 
       objMyFile.DisplayFile();


       int retValue = objMyFile.DeleteFile();
   }


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

18


Hiện thực



• Hiện thực nhiều interface


public <i>interface</i> IFileTwo


{


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

19


Hiện thực



public class MyFile: IFile, IFileTwo



{


   public int DeleteFile()


   {


      Console.WriteLine ("DeleteFile Implementation!");


      return(0);   


   }


   public void DisplayFile()


   {


      Console.WriteLine("DisplayFile Implementation!");


   }


   public void ApplySecondInterface()


   {


     Console.WriteLine("ApplySecondInterface Implementation!");


</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

20


Hiện thực




class MultipleInterfaces


{


    static void Main()
{


MyFile objMyFile = new MyFile();
objMyFile.DisplayFile();


int retValue = objMyFile.DeleteFile();
objMyFile.ApplySecondInterface();   
}


</div>

<!--links-->

×