Interfaces – Confused


Giao diện, cái này trong C# lúc mới bắt đầu tìm hiểu thì chả hiểu gì cả. Không hiểu tại sao lại phải dùng tới nó, tại sao các class phải thực thi một số giao diện nào đó. Cuối cùng thì tìm ra một cái lí do đơn giản mà nghi là đúng, đó là: tránh lỗi khi chạy.

Khi mà chúng ta thực hiện câu lệnh foreach, chúng ta thực thi Interface: IEnumerable. Nhưng sau này mình đã thử bỏ nó đi, chỉ thực thi cái phương thức GetEnumerator của nó thì vẫn chạy bình thường. Như vậy, có thể thấy là chúng ta thừa hưởng IEnumerator chẳng qua là để chắc chắn chúng ta sẽ thực thi GetEnumerator(), để có thể đảm bảo code của chương trình chạy toàn vẹn, không gặp lỗi sau này. Nếu như chúng ta có quên thực thi IEnumerable thì Visual Studio cũng báo lỗi giùm, quá khỏe… Bởi vì tất cả các lập trình viên đều mong muốn chương trình mình gặp lỗi trong lúc Compile chứ không phải trong Runtime (lúc này đem ra sử dụng rồi, khó mà sửa lắm).

Chỉ mới xong một chuyện biết về Interface là như vậy, sau này mới thấy trong số vô vàn interface mà có sẵn, có những cái rất là dễ nhầm lẫn. Ví dụ như IEnumerable, IEnumerator (đều dùng để duyệt qua một tập hợp); IComparable và IComparer (dùng để sắp xếp các đối tượng), mà định nghĩa của những interface này lại rất là giống nhau nữa chứ. Cái này phải từ từ mà tìm hiểu chứ nói ra thì hơi dài, viết ra thì mỏi tay… Sẵn tiện đây có cái link nói về IComparable và IComparer, bạn nào thích tìm hiểu thì ghé vào nhé: http://support.microsoft.com/kb/320727, rất dễ hiểu

Tác giả: xuanchien

Tran Xuan Chien. Japan Advanced Institute of Science and Technology - Japan. Senior Developer - NUS Technology.

6 thoughts on “Interfaces – Confused”

  1. Do chua phai la ly do that su cua viec su dung interface. Interface duoc dua ra de hoan thien khai niem THUA KE (Inheritance) trong C#. Boi trong C#, mot class khong the inherit tu nhieu class, nhung co the duoc implement nhieu interface khac nhau. Va viec nay giup toi uu hoa cac class boi tranh duoc viec thua huong nhung cai khong can thiet.Hay hinh dung nhu the nay, interface chi mo ta mot phan cua doi tuong do, chu khong mo ta hoan toan doi tuong. Do do, khi su dung interface se giup linh hoat hon trong viec degin cac class.Có một ví dụ khá thú vị để dễ hiểu hơn cho việc này (cái này không có ý gì xấu nhé, các bạn gái cũng có thể làm tương tự khi tạo bạn trai nhé): tôi muốn có 1 cô bạn gái, nên tôi sẽ tạo ra 1 cô bạn gái. Nếu cô bạn gái này được thừa kế từ một class mẫu GirlFriend thì chắc chắn sẽ có những yếu tố mà tôi ko thích. Do đó, tôi sẽ tạo ra cô bạn gái đó với những yếu tố mà tôi là thích hợp với tôi bằng việc sử dụng những interface thích hợp.class MyGirlFriend: People, IFemale, IBeautiful, ITall, … (Tất nhiên là MyGirlFriend phải thừa kế từ People, tiếp theo sẽ là những yếu tố mà tôi cần như IFemale😀, IBeautifull, …)

  2. Nhưng khi mình thừa hưởng từ Interface đó thì thực chất là mình muốn thực thi các phương thức bên trong nó. Cũng lấy ví dụ của anh, khi mà mình muốn Class MyGirlFriend có những tính năng mình muốn thì mình chỉ việc thực hiện các phương thức trong các interface tương ứng, khi đó em sẽ thực thi các phương thức của IFemale, IBeautiful… mà không cần phải trực tiếp thừa hưởng interface đó. Vì thế, em nghĩ là interface như là ràng buộc giúp ta nhớ các phương thức thiết kế các class vậy.

  3. Em nghĩ chỉ gọi một phương thức duy nhất trong interface là nó chạy sao??Trường hợp e gặp 1 phương thức trong interface mà nó gọi 1 phương thức khác trong interface đó thì sao??^^Nếu đã học qua đa thừa kế, và biết trục trặc xảy ra khi có đa thừa kế, e sẽ hiểu tại sao interface phải tồn tại ^^

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s