chcę osiągnąć coś takiego w C# 3.5:Jak umieścić ograniczenie interfejsu dla ogólnej metody w C# 3.5?
public void Register<T>() : where T : interface {}
mogę zrobić to z klasy lub struktury, ale jak to zrobić z interfejsem?
chcę osiągnąć coś takiego w C# 3.5:Jak umieścić ograniczenie interfejsu dla ogólnej metody w C# 3.5?
public void Register<T>() : where T : interface {}
mogę zrobić to z klasy lub struktury, ale jak to zrobić z interfejsem?
C# i CLR nie obsługują ogólnych ograniczeń interfejsu, chociaż można je ograniczyć do konkretnego interfejsu (zobacz inne odpowiedzi). Najbliższym, co można uzyskać, jest "klasa" i sprawdź typ za pomocą refleksji w czasie uruchamiania. Obawiam się. Po co miałbyś ograniczać interfejs?
Może być zaimplementowany niestandardowy/szalony zaimplementowany wtrysk zależności. Ale to mnie zgaduję. – Felype
Jeśli proszą o dodanie ograniczenia do konkretnego interfejsu, to proste:
public void Register<T>(T data) where T : ISomeInterface
Jeśli pytasz czy słowo istnieje jak klasy lub struktury, aby ograniczyć zakres możliwych rodzajów dla T, które jest niedostępne.
Chociaż można napisać:
public void Register<T>(T data) where T : class // (or struct)
nie można napisać:
public void Register<T>(T data) where T : interface
Nie można domagać się, że T jest interfejsem, więc trzeba by użyć refleksji w czasie wykonywania, aby to potwierdzić.
Jeśli to możliwe, wybrałem takie rozwiązanie. Działa to tylko wtedy, gdy chcesz, aby kilka specyficznych interfejsów (na przykład tych, do których masz dostęp do źródła) zostało przekazanych jako parametr ogólny, a nie żadnych.
IInterface
.IInterface
w źródle, wygląda to tak:
dowolnego interfejsu chcesz być przekazany jako parametr Generic:
public interface IWhatever : IInterface
{
// IWhatever specific declarations
}
IInterface:
public interface IInterface
{
// Nothing in here, keep moving
}
Klasa, na którym chcesz umieścić ograniczenie typu:
public class WorldPieceGenerator<T> where T : IInterface
{
// Actual world piece generating code
}
duplikat http://stackoverflow.com/questions/1096568/how-can-i-use-interface- as-ac-generic-type-constraint –