uocmo_kchodoi
Moderator
- Xu
- 132
INTERFACE (LỚP GIAO DIỆN) TRONG C#
Khái niệm: Interface (nhiều tài liệu gọi là giao diện hoặc lớp giao tiếp) là 1 tập các thành phần chỉ có khai báo mà không có phần định nghĩa.
Mục đích sử dụng:
Một interface giống như class, nhưng không có phần thực thi. Trong đó interface chỉ chứa các khai báo:
- Sự kiện (event)
- Indexer (một dạng thuộc tính đặc biệt trong C# cho phép lấy giá trị dựa trên chỉ mục)
- Phương thức (method)
- Thuộc tính (property)
Vậy, đâu là lợi thế khi interface không thực thi các chức năng?
Đó là vì trong các kiến trúc hệ thống làm việc với nhau theo dạng cắm – chạy (plug-n-play), các thành phần ở đó sẽ trao đổi thông tin cho nhau. Khi trao đổi thông tin, các thành phần sẽ thực thi chung interface, việc này có thể được sử dụng mà không cần phải viết thêm code. Theo đó, các interface sẽ bắt buộc các thành phần cung cấp đầy đủ các thành viên (member) ở dạng công khai (public) để được sử dụng theo cùng một cách thống nhất.
Bởi vì các interface được thực thi bởi các lớp và cấu trúc dẫn xuất nên chúng định nghĩa ra một bản giao kèo (contract).
Một số đặc tính nổi bật của Interface
- Interface có thể được kế thừa từ nhiều interface cơ sở (base interface)
- Các class hay struct có thể thực thi cùng lúc nhiều interface
- Interface chỉ chứa các khai báo thành viên event, indexer, method, property.
- Các thành viên của interface đều ở dạng công khai (public)
- Interface có thể sử dụng với generic để tạo thành các generic interface
- Các khai báo thành viên của interface có thể ở dạng generic
Khai báo Interface trong C#
Các Interface được khai báo bởi sử dụng từ khóa interface trong C#. Nó tương tự như khai báo lớp. Theo mặc định, các lệnh Interface là puclic. Ví dụ sau minh họa một khai báo Interface trong C#:
public interface ITransactions
{
// các thành viên của interface
//các phương thức
void hienThiThongTinGiaoDich();
double laySoLuong();
}
Ví dụ
Sau đây là ví dụ minh họa trình triển khai của Interface trên: tạo 2 lớp có tên lần lượt làGiaoDichHangHoa, TestCsharp và một interface có tên là GiaoDich
interface GiaoDich
using System;
namespace VietJackCsharp
{
public interface GiaoDich
{
// cac thanh vien cua interface
//cac phuong thuc
void hienThiThongTinGiaoDich();
double laySoLuong();
}
}
Lớp GiaoDichHangHoa kế thừa interface GiaoDich
using System;
namespace VietJackCsharp
{
class GiaoDichHangHoa : GiaoDich
{
private string ma_hang_hoa;
private string ngay;
private double so_luong;
public GiaoDichHangHoa()
{
ma_hang_hoa = " ";
ngay = " ";
so_luong = 0.0;
}
public GiaoDichHangHoa(string c, string d, double a)
{
ma_hang_hoa = c;
ngay = d;
so_luong = a;
}
public double laySoLuong()
{
return so_luong;
}
public void hienThiThongTinGiaoDich()
{
Console.WriteLine("Ma hang hoa: {0}", ma_hang_hoa);
Console.WriteLine("Ngay giao dich: {0}", ngay);
Console.WriteLine("So luong: {0}", laySoLuong());
}
}
}
Lớp TestCsharp chứa phương thức main() để thao tác trên đối tượng GiaoDichHangHoa
using System;
namespace VietJackCsharp
{
public class TestCsharp
{
static void Main(string[] args)
{
Console.WriteLine("Interface trong C#");
Console.WriteLine("Vi du minh hoa interface");
Console.WriteLine("--------------------------");
//tao cac doi tuong GiaoDichHangHoa
GiaoDichHangHoa t1 = new GiaoDichHangHoa("001", "8/10/2012", 78900.00);
GiaoDichHangHoa t2 = new GiaoDichHangHoa("002", "9/10/2012", 451900.00);
t1.hienThiThongTinGiaoDich();
t2.hienThiThongTinGiaoDich();
Console.ReadKey();
}
}
}
Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.
Nguồn: vietjack.com