Wie kann man am einfachsten testen, ob ein Objekt eine bestimmte Schnittstelle in C# implementiert? (Antwort auf diese Frage in Java )
Antworten
Zu viele Anzeigen?
Dutchman078
Punkte
91
mavi
Punkte
1002
Dies habe ich durch die Verwendung der is
Stichwort.
Aber auch ich brauchte ein neues Objekt, um die Eigenschaften der Schnittstelle zu nutzen. Um dies zu erreichen, müssen Sie die neue Variable nach der Schnittstelle hinzufügen.
objectToCheck is Interface newVariableWithInterfaceProperties
.
public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken,
RequestHandlerDelegate<TResponse> next)
{
if (request is ICacheableQuery cachableRequest)
{
// here cachableRequest now has the interface properties.
}
}
Guosheng Chen
Punkte
11
interface IItem
{
}
class ItemImp : IItem
{
}
class Program
{
static void Main(string[] args)
{
Type t = typeof(ItemImp);
Console.WriteLine("t == typeof(IItem) -> {0}", t == typeof(IItem));
Console.WriteLine("typeof(IItem).IsAssignableFrom(t) -> {0}", typeof(IItem).IsAssignableFrom(t));
Console.WriteLine("t is IItem -> {0}", t is IItem);
Console.WriteLine("new ItemImp() is IItem -> {0}", new ItemImp() is IItem);
}
}
// Here are outputs:
// t == typeof(IItem) -> False
// typeof(IItem).IsAssignableFrom(t) -> True
// t is IItem -> False
// new ItemImp() is IItem -> True
jamesmillerio
Punkte
3074
Zusätzlich zum Testen mit dem "is"-Operator können Sie Ihre Methoden ausschmücken, um sicherzustellen, dass die übergebenen Variablen eine bestimmte Schnittstelle implementieren, z. B. so:
public static void BubbleSort<T>(ref IList<T> unsorted_list) where T : IComparable
{
//Some bubbly sorting
}
Ich bin nicht sicher, in welcher Version von .Net dies implementiert wurde, so dass es in Ihrer Version möglicherweise nicht funktioniert.