2010-08-30 35 views
8

Có bắt buộc phải ràng buộc một định nghĩa chung để thực hiện "giao diện chung" ... nghĩa là, tôi muốn lớp hỗ trợ truyền một giao diện và một lớp chung ràng buộc nó để lớp thực hiện giao diện. Ví dụ nếu tôi nói:Bắt buộc thực thi giao diện chung trong C#

MyGenericClass<IMyInterface, MyImplementation>.DoSomething(); 

Điều đó sẽ bị hạn chế rất MyImplementation mà thực hiện IMyInterface

Theo như tôi biết rằng có thể đạt được bằng cách

public class Dynamic_Loader<T, S> where S: T 

Bây giờ, là có anyway để cũng buộc T là một giao diện?

Edit: Mục đích của việc này là phải có cái gì đó như:

private static List<T> interfaceList = new List<T>(); 

public static List<T> InterfaceList {get { return interfaceList;}} 

public static void Add(S input) { interfaceList.Add(input);} 

và có danh sách hạn chế để giao diện duy nhất (vì nó là vụ phải trở lại hiện thực của giao diện nhất định)

Trả lời

7

Bạn có nghĩa là, có thể có một ràng buộc trên T như where T : interface không?

Nếu có, thì không: this list có khá nhiều tùy chọn của bạn.

Những gì bạn có cũng gần như vậy, tôi tin.

Ngoài sự tò mò, lý do bạn muốn hạn chế T làm giao diện là gì?

Hoặc bạn có nghĩa là một hạn chế cũng được đưa vào T cho T-có thể thực hiện một sốgiao diện cụ thể?

Nếu vậy, thì : chỉ cần có hai where khoản (ví dụ, where S : T where T : U).

+0

Ồ, tôi sẽ cho điều này: công cộng Danh sách tĩnh interfacelist = new List ; void tĩnh công cộng Thêm (đầu vào S); Và vâng, nó cũng sẽ hoạt động nếu T chỉ là một lớp cơ sở nhưng máy khách sẽ nhận được các giao diện chứ không phải các lớp cơ sở. –

3
where T: IMyOtherInterfaceForT 

Ví dụ:

public class Test<T, V> 
    where T : V 
    where V : IEnumerable<int> 
    { 
    } 
1

Bạn có thể làm điều gì đó như thế này để thực thi nó trong thời gian chạy thay vì biên dịch thời gian.

public class Test<T> where T : class 
{ 
    public Test() 
    { 
    Type t = typeof(T); 
    if(!t.IsInterface) 
     throw new ArgumentException("T must be an interface type"); 
    } 
} 
Các vấn đề liên quan