Computer >> Máy Tính >  >> Lập trình >> C#

Các giao diện hoạt động như thế nào trong C #?

Một giao diện xác định một hợp đồng sẽ được thực hiện bởi một lớp hoặc một cấu trúc. Nó có thể chứa các phương thức, thuộc tính, sự kiện và chỉ mục. Giao diện tương tự như một lớp ngoại trừ việc nó không chứa bất kỳ dữ liệu nào và chỉ xác định hành vi mà nó có thể thực hiện (hay chính xác hơn là lớp triển khai nó có thể làm).

Một lớp có thể triển khai một hoặc nhiều giao diện. Để triển khai một thành viên giao diện, lớp phải có một thành viên chung có cùng định nghĩa phương thức với thành viên giao diện, tức là cùng tên và chữ ký.

Ví dụ, IComparer là một giao diện được định nghĩa trong không gian tên System.Collections định nghĩa hợp đồng cho một phương thức so sánh hai đối tượng. Lớp Xe triển khai giao diện IComparer

public interface IDriver{
   void Drive();
}
public class Car : IDriver{
   public string Name { get; set; }

   public int Speed { get; set; }
   public void Drive(){
      Console.WriteLine($"{Name}: {Speed}");
   }
}

Tất cả các thành viên trên một giao diện là hoàn toàn trừu tượng và không có bất kỳ chi tiết triển khai nào. Tất cả các thành viên giao diện là công khai. Bạn không thể sử dụng công cụ sửa đổi quyền truy cập với một thành viên giao diện. Lớp triển khai giao diện phải cung cấp các phương thức công khai triển khai giao diện.

Ví dụ:một giao diện có thể mở rộng các giao diện khác -

public interface IPerformer { void Perform(); }
public interface ISinger : IPerformer{
   void Sing();
}

Các giao diện cho phép bạn bao gồm các hành vi từ nhiều nguồn trong một lớp. Vì C # không cho phép đa kế thừa như C ++, nên các giao diện là một cách để đạt được đa kế thừa trong C #.

Một hạn chế của các giao diện là chúng kém linh hoạt hơn các lớp khi bạn sử dụng chúng để hiển thị các API. Khi bạn thay đổi hợp đồng của giao diện, tất cả các lớp triển khai giao diện đó sẽ phá vỡ và cần cập nhật để triển khai giao diện.

Ví dụ

using System;
class Program{
   static void Main(){
      var carOne = new Car { Name = "Honda", Speed = 100 };
      var carTwo = new Car { Name = "Toyota", Speed = 70 };
      carOne.Drive();
      carTwo.Drive();
   }
}
public interface IDriver{
   void Drive();
}
public class Car : IDriver{
   public string Name { get; set; }
   public int Speed { get; set; }
   public void Drive(){
      Console.WriteLine($"{Name}: {Speed}");
   }
}

Đầu ra

Honda: 100
Toyota: 70