Cách dễ nhất để hiểu giao diện là chúng cho phép các đối tượng khác nhau hiển thị chức năng COMMON. Điều này cho phép lập trình viên viết nhiều mã đơn giản hơn, ngắn hơn mà các chương trình vào một giao diện, sau đó miễn là các đối tượng thực hiện giao diện đó nó sẽ hoạt động.
Cơ sở dữ liệu cung cấp:
Có rất nhiều nhà cung cấp cơ sở dữ liệu khác nhau, MySQL, MSSQL, Oracle, vv Tuy nhiên tất cả các đối tượng cơ sở dữ liệu có thể làm những điều tương tự, do đó bạn sẽ tìm thấy nhiều giao diện cho các đối tượng cơ sở dữ liệu. Nếu một đối tượng thực hiện IDBConnection thì nó sẽ hiển thị các phương thức Open() và Close(). Vì vậy, nếu tôi muốn chương trình của tôi là nhà cung cấp cơ sở dữ liệu bất khả tri, tôi lập trình cho giao diện chứ không phải cho các nhà cung cấp cụ thể.
IDbConnection connection = GetDatabaseConnectionFromConfig()
connection.Open()
// do stuff
connection.Close()
Xem bằng cách lập trình để một giao diện (IDbConnection) bây giờ tôi có thể trao đổi trên bất kỳ nhà cung cấp dữ liệu trong cấu hình của tôi, nhưng mã của tôi vẫn như chính xác như vậy. Sự linh hoạt này có thể cực kỳ hữu ích và dễ bảo trì. Nhược điểm của điều này là tôi chỉ có thể thực hiện các hoạt động cơ sở dữ liệu 'chung' và có thể không tận dụng hết sức mạnh mà mỗi nhà cung cấp cụ thể cung cấp như vậy với mọi thứ trong lập trình bạn có giao dịch và bạn phải xác định kịch bản nào sẽ mang lại lợi ích cho bạn nhiều nhất.
Bộ sưu tập:
Nếu bạn nhận thấy hầu hết các bộ sưu tập cài đặt giao diện này được gọi là IEnumerable. IEnumerable trả về một IEnumerator có MoveNext(), Current, và Reset(). Điều này cho phép C# dễ dàng di chuyển qua bộ sưu tập của bạn. Lý do nó có thể làm điều này là vì nó cho thấy giao diện IEnumerable nó biết rằng đối tượng phơi bày các phương thức mà nó cần phải trải qua nó. Điều này làm hai việc. 1) vòng foreach bây giờ sẽ biết làm thế nào để liệt kê các bộ sưu tập và 2) bây giờ bạn có thể áp dụng mạnh mẽ LINQ exprssions để bộ sưu tập của bạn. Một lần nữa lý do tại sao các giao diện lại hữu ích ở đây là bởi vì tất cả các bộ sưu tập đều có thứ gì đó trong COMMON, chúng có thể được chuyển qua. Mỗi bộ sưu tập có thể được chuyển qua một cách khác (danh sách liên kết so với mảng) nhưng đó là vẻ đẹp của giao diện là việc triển khai được ẩn và không liên quan đến người tiêu dùng của giao diện. MoveNext() cung cấp cho bạn mục tiếp theo trong bộ sưu tập, nó không quan trọng CÁCH nó làm điều đó. Đẹp quá nhỉ?
Polymorphism
Khi bạn đang thiết kế giao diện riêng của bạn, bạn chỉ cần phải tự hỏi mình một câu hỏi. Những thứ này có điểm chung là gì? Một khi bạn tìm thấy tất cả những thứ mà các đối tượng chia sẻ, bạn trừu tượng hóa các thuộc tính/phương thức đó thành một giao diện để mỗi đối tượng có thể kế thừa từ nó. Sau đó, bạn có thể lập trình chống lại một số đối tượng bằng cách sử dụng một giao diện.
Và tất nhiên tôi phải đưa ra ví dụ đa hình C++ yêu thích của mình, ví dụ về động vật. Tất cả các loài động vật đều có đặc điểm nhất định. Cho phép nói rằng họ có thể di chuyển, nói chuyện, và tất cả đều có một tên. Vì tôi vừa xác định được tất cả các loài động vật của tôi có điểm chung và tôi có thể tóm tắt những phẩm chất đó vào giao diện IAnimal. Sau đó, tôi tạo ra một đối tượng Bear, một đối tượng Owl và một đối tượng Snake tất cả đều triển khai thực hiện giao diện này.Lý do tại sao bạn có thể lưu trữ các đối tượng khác nhau cùng nhau thực hiện cùng một giao diện là vì các giao diện đại diện cho một sự thay thế IS-A. Một con gấu IS-A động vật, một con vật IS-A cú, do đó, nó làm cho vì tôi có thể thu thập tất cả chúng như là Động vật.
var animals = new IAnimal[] = {new Bear(), new Owl(), new Snake()} // here I can collect different objects in a single collection because they inherit from the same interface
foreach (IAnimal animal in animals)
{
Console.WriteLine(animal.Name)
animal.Speak() // a bear growls, a owl hoots, and a snake hisses
animal.Move() // bear runs, owl flys, snake slithers
}
Bạn có thể thấy rằng mặc dù những con vật này thực hiện mỗi hành động theo một cách khác, tôi có thể lập trình đối với họ tất cả trong một mô hình thống nhất và điều này chỉ là một trong nhiều lợi ích của giao diện. Vì vậy, một lần nữa điều quan trọng nhất với giao diện là những gì các đối tượng có điểm chung để bạn có thể lập trình chống lại các đối tượng DIFFERENT theo cách CÙNG. Tiết kiệm thời gian, tạo ra các ứng dụng linh hoạt hơn, ẩn tính phức tạp/triển khai, mô hình các đối tượng/tình huống trong thế giới thực, cùng với nhiều lợi ích khác.
Hy vọng điều này sẽ hữu ích.
Điều này có thể giúp: giao diện mô tả * thuộc tính ngoại vi *, lớp trừu tượng xác định các hàm * lõi *. – Jason
nếu bạn muốn dự án của bạn nên hỗ trợ cơ sở dữ liệu khác nhau. để khách hàng có thể thay đổi cơ sở dữ liệu của mình trong tương lai, chúng tôi sử dụng giao diện chứa các thủ tục thuộc tính trong tệp lớp với các đối tượng thay đổi ........ –
Có rất nhiều bản sao tiềm năng của câu hỏi này ... dưới đây là một số ít: [1 ] (http://stackoverflow.com/questions/240152/why-would-i-want-to-use-interfaces), [2] (http://stackoverflow.com/questions/3355408/explaining-interfaces-to -students), [3] (http://stackoverflow.com/questions/122883/interfaces-why-cant-i-seem-to-grasp-them) –