Interface trong C#



Một Interface được định nghĩa như là một giao ước có tính chất cú pháp (syntactical contract) mà tất cả lớp kế thừa Interface đó nên theo. Interface định nghĩa phần "Là gì" của giao ước và các lớp kế thừa định nghĩa phần "Cách nào" của giao ước đó.

Interface định nghĩa các thuộc tính, phương thức và sự kiện, mà là các thành viên của Interface đó. Các Interface chỉ chứa khai báo của các thành viên này. Việc định nghĩa các thành viên là trách nhiệm của lớp kế thừa. Nó thường giúp ích trong việc cung cấp một Cấu trúc chuẩn mà các lớp kế thừa nên theo.

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.

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

Interface trong C#