Sto cercando di scrivere un metodo di estensione che controlla se un oggetto è sub classe di T.metodo di estensione per verificare se un oggetto è sub classe di T
Ecco quello che ho fatto, ma non accettato da 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);
}
Qualche idea, come posso scrivere questo?
nota a margine: e termini "di classe bambino", "classe padre" sono scoraggiati Dovresti invece dire "derivato da". Una macchina non è figlia di un veicolo; un'auto deriva da un veicolo. In alternativa, chiamerei il tuo metodo "DerivesFrom". –
dcastro
Sono d'accordo. Riservare i termini figlio/genitore per le relazioni "ha un" piuttosto che "è un". In particolare nelle liste o nelle relazioni ricorsive come gli alberi. – weston
Commenti: 'typeof (X)' richiede che 'X' sia un tipo (come il tuo' T'), non un valore o un'espressione (come il tuo 'obj'). Sei consapevole che 'IsSubclassOf' è falso se uno dei tipi è un'interfaccia o un tipo di valore e se le due classi sono identiche? Forse volevi 'IsAssignableFrom'? Probabilmente è più facile, però, usare la parola chiave C# 'is'. Vedi la risposta di Weston. –