Jaki jest najprostszy sposób sprawdzenia, czy obiekt implementuje dany interfejs w języku C #? (Odpowiedz na to pytanie w Javie )
c#
reflection
interface
JoshRivers
źródło
źródło
if (object is IBlah iblah) { iblah.SomeMethod(); }
Używanie operatorów
is
lubas
jest poprawnym sposobem, jeśli znasz typ interfejsu w czasie kompilacji i masz instancję testowanego typu. Coś, o czym nikt inny nie wspomniał, toType.IsAssignableFrom
:Myślę, że jest to o wiele ładniejsze niż przeglądanie tablicy zwróconej przez
GetInterfaces
i ma tę zaletę, że działa również dla klas.źródło
typeof(IList).IsAssignableFrom(someType)
, bez<>
.Na przykład:
Dla klasy:
Sprawdź, czy
typeof(MyClass).GetInterfaces()
zawiera interfejs.źródło
Jeśli chcesz użyć obiektu zapisanego po sprawdzeniu:
Od wersji C # 7.0:
To jest to samo co
Zobacz Dokumenty .NET: Dopasowywanie wzorca za pomocą
is
wzorca # Typeźródło
Odmiana odpowiedzi @ AndrewKennan, której ostatnio użyłem do typów uzyskanych w czasie wykonywania:
źródło
Ten post jest dobrą odpowiedzią.
To prosta próbka:
lub
źródło
Oprócz testowania za pomocą operatora „jest” możesz ozdobić swoje metody, aby upewnić się, że przekazywane do niego zmienne implementują określony interfejs, na przykład:
Nie jestem pewien, w której wersji .Net został zaimplementowany, więc może nie działać w twojej wersji.
źródło
Dla mnie zadziałało:
Assert.IsNotNull(typeof (YourClass).GetInterfaces().SingleOrDefault(i => i == typeof (ISomeInterface)));
źródło
Ostatnio próbowałem użyć odpowiedzi Andrew Kennana i z jakiegoś powodu nie działało to dla mnie. Użyłem tego zamiast tego i zadziałało (uwaga: może być wymagane wpisanie przestrzeni nazw).
źródło
użyłem
Assert.IsTrue(myObject is ImyInterface);
dla testu w moim teście jednostkowym, który sprawdza, czy myObject jest obiektem, który zaimplementował mój interfejs ImyInterface.
źródło
Miałem sytuację, w której przekazywałem zmienną do metody i nie byłem pewien, czy będzie to interfejs, czy obiekt.
Cele były następujące:
Osiągnąłem to dzięki:
źródło
To powinno działać:
Ale też miłe:
Lub nawet (niezbyt elegancko):
źródło