Vérifiez de manière fiable les relations entre les sous-classes en C#, y compris les comparaisons d'auto-types
Pour déterminer si un type est une sous-classe d'un autre type en C#, vous pouvez utiliser IsSubclassOf
:
typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true
Cependant, cette approche échoue lors de la vérification de la relation de sous-classe entre le type et lui-même :
typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false
Pour contourner cette limitation, plusieurs options existent :
Type.IsAssignableFrom :
typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true
Bien que cette méthode renvoie vrai pour les sous-classes, elle fournit également des faux positifs pour des types non liés, par exemple :
typeof(BaseClass).IsAssignableFrom(typeof(int[])); // 返回 true
est et comme (opérations sur les objets) :
Ces opérateurs nécessitent des objets plutôt que des objets de type et ne peuvent pas être utilisés pour comparer des définitions de type :
// 无法编译: SubClass is BaseClass // 无法编译: typeof(SubClass) is typeof(BaseClass)
Méthode personnalisée :
Afin de vérifier avec précision la relation entre les sous-classes, vous pouvez créer une méthode d'assistance :
public static bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant) { return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase; }
Cette méthode gère correctement les comparaisons de sous-classement et d'égalité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!