Próbuję napisać metodę rozszerzenia, który sprawdza, czy dany przedmiot jest sub klasy T.metodę rozszerzenia, aby sprawdzić, czy obiekt jest sub klasy T
Oto co zrobiłem, ale nie są akceptowane przez visual studio .
public static bool IsChildOf<T>(this object obj)
{
return (typeof(obj).IsSubclassOf(typeof(T)));
}
[Test()]
public void IsChildOfTest()
{
var dog = new Dog();
var isAnimal = dog.IsChildOf<Animal>();
Assert.That(isAnimal);
}
Każdy pomysł, jak mogę to napisać?
marginesie: „klasa dziecko” i terminy „klasa dominująca” są zniechęceni. Zamiast tego powinieneś powiedzieć "pochodzi z". Samochód nie jest dzieckiem pojazdu; samochód wywodzi się z pojazdu. Zamiast tego nazwałbym twoją metodę "DerivesFrom". –
dcastro
Zgadzam się. Zarezerwuj terminy dziecko/rodzic dla relacji "ma", a nie "jest". Zwłaszcza na listach lub relacjach rekurencyjnych, takich jak drzewa. – weston
Komentarze: 'typeof (X)' wymaga, aby 'X' był typem (jak twoje' T'), a nie wartością lub wyrażeniem (jak twoje 'obj'). Czy wiesz, że 'IsSubclassOf' ma wartość false, jeśli jeden z typów jest interfejsem lub typem wartości i czy te dwie klasy są identyczne? Może chciałeś 'IsAssignableFrom'? Prawdopodobnie łatwiejsze jest użycie słowa kluczowego C# 'is'. Zobacz odpowiedź Westona. –