2009-03-17 48 views
7

Điểm viết một giao diện không có thành viên là gì?Tại sao chúng ta sử dụng giao diện thành viên?

INamingContainer là một ví dụ trong Khuôn khổ .NET. Và nó được mô tả trong MSDN như:

Xác định một điều khiển container tạo ra một không gian tên ID mới trong hệ thống phân cấp quản lý một sơ của đối tượng. này chỉ là giao diện điểm đánh dấu.

là nó được sử dụng cho chỉ loại khối:

if (myControl is INamingContainer) 
{ 
    // do something 
} 

Hoặc là có lợi thế khác của nó?

EDIT: Nó được gọi là Marker Interface Pattern (nhờ Preet)

Trả lời

8

Điều này là để đảm bảo rằng bạn có thể đối xử với một bộ sưu tập của các đối tượng như các loại tương tự và sau đó thực hiện một số thao tác trên kiểu đó (Bạn biết rằng nó phải kế thừa từ đối tượng).

Hãy nghĩ nó giống như thuộc tính. Đó là loại dữ liệu meta.

Bạn cũng có thể muốn thực hiện thao tác trên một loại đã biết (ví dụ: System.Web.UI.Control) nhưng chỉ thực hiện thao tác đó nếu loại được kế thừa từ một giao diện nhất định (ví dụ: INamingContainer).

foreach(var ctrl in this.Controls) 
{ 
    if (ctrl is INamingContainer) 
    { 
     // Do something on the control 
    } 
} 
+0

Như một vấn đề của thực tế, đây là cách tôi áp dụng "thuộc tính" trong C++, vì bạn không có sự phản chiếu nhưng bạn có RTTI. –

+0

điểm tuyệt vời - không được thực hiện C++ trong gần 8 năm tôi quên những thứ như thế này. –

+0

Điều này dường như không phải là câu trả lời cho câu hỏi. Anh ta hỏi về các giao diện không có người dùng - những giao diện không có các hoạt động hoặc thuộc tính chung. Nó đã được chấp nhận, tho ... –

10

Giao diện thành viên được sử dụng để cung cấp khả năng giống như mixin trong C#. Vì vậy, cho một lớp A:

class A : B { ... } 

Bạn có thể cung cấp cho nó thêm chức năng (đa kế thừa a-la) bằng cách định nghĩa một giao diện IStuff:

interface IStuff {} 

rồi 'triển khai' nó trong A:

class A : B, IStuff { ... } 

và sau đó thêm các tính năng bổ sung

class Methods { 
    public static void Something(this IStuff stuff) { 
    // some functionality here 
    } 
} 
+1

_very_ ý tưởng hay. Đã không nhìn thấy khả năng này trước đây, nhưng bây giờ sẽ tìm kiếm cơ hội. –

+1

ý tưởng rất hay! –

+1

+1 Ồ, đó là * bệnh * ... một cách tốt! – TarkaDaal

8

Giao diện điểm đánh dấu của nó. Nó có thể được sử dụng để trang trí các loại để bạn có thể tìm ra nó là kiểu đúng lúc chạy với việc sử dụng sự phản chiếu. chúng tôi sử dụng nó để đảm bảo rằng các loại chung là chính xác trong callee.

+0

Điểm tốt về lợi thế của việc không sử dụng Reflection. –

+0

Phản ánh có hiệu suất đáng kể. –

3

Để nhầm lẫn các pythonistas, những người cho rằng việc nhập vịt thật thú vị.

+1

+1 vui nhộn (LOL dành cho trẻ em). – kenny

Các vấn đề liên quan