2012-02-01 25 views
6

Về cơ bản những gì tôi muốn làm là ngụ ý một lớp có thể chứa một danh sách các tham chiếu đến các thể hiện cùng loại. Giống như sau:Bạn có thể định nghĩa một giao diện sao cho một lớp thực hiện nó phải chứa một thành viên cũng thuộc lớp đó không?

interface IAccessibilityFeature 
{ 
    List<IAccessibilityFeature> Settings { get; set; } 
} 

class MyAccess : IAccessibilityFeature 
{ 
    List<MyAccess> Settings { get; set; } 
} 

Tôi biết điều này sẽ không biên dịch vì giao diện một cách rõ ràng nói Settings tôi phải loại List<IAccessibilityFeature>. Những gì tôi sau là một số hướng dẫn về cách chính xác để đạt được những gì tôi đang cố gắng làm trong lớp học MyAccess.

+2

Hãy xem http://msdn.microsoft.com/en-us/library/kwtft8ak(v= vs.80) .aspx –

+0

Chúc mừng Tom, đọc thú vị :) –

+4

Lưu ý rằng cả hai câu trả lời hiện tại đều không thực sự * yêu cầu * rằng lớp thực hiện cung cấp * chính nó * làm tham số kiểu T. Nó là cuối cùng tùy thuộc vào bạn để thực thi yêu cầu nghiêm ngặt, hệ thống kiểu không thể làm điều đó cho bạn. –

Trả lời

14

Hãy thử điều này:

interface IAccessibilityFeature<T> where T : IAccessibilityFeature<T> 
{ 
    List<T> Settings { get; set; } 
} 

class MyAccess : IAccessibilityFeature<MyAccess> 
{ 
    List<MyAccess> Settings { get; set; } 
} 
+3

+1 - Liên lạc đẹp với ràng buộc chung. –

+0

Đẹp, cảm ơn rất nhiều vì điều đó! –

+0

YW. Tôi đã sử dụng mẫu này nhiều lần. – ja72

3

Điều này có thể được thực hiện với:

interface IAccessibilityFeature<T> 
{ 
    List<T> Settings { get; set; } 
} 

class MyAccess : IAccessibilityFeature<MyAccess> 
{ 
    List<MyAccess> Settings { get; set; } 
} 
+0

Cảm ơn rất nhiều M.Babcock! –

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