Je connais is
et as
pour instanceof
, mais qu'en est-il de la méthode réfléchissante isInstance () ?
L'équivalent de obj.getClass().isInstance(otherObj)
de Java en C # est le suivant:
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
Notez que tandis que les deux Java et C # fonctionnent sur l'objet de type d'exécution (Java Java.lang.Class
≣ C # System.Type
) D'un obj
(via .getClass()
vs .getType()
), isInstance
de Java prend un objet comme argument, tandis que IsAssignableFrom
de C # attend un autre objet System.Type
.
bool result = (obj is MyClass); // Better than using 'as'
Cela dépend, utilisez is
si vous ne voulez pas utiliser le résultat du cast et utilisez as
si vous le souhaitez. Vous ne voulez presque jamais écrire:
if(foo is Bar) {
return (Bar)foo;
}
Au lieu de:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
juste en haut de ma tête, vous pourriez aussi faire:
bool result = ((obj as MyClass) != null)
Je ne sais pas lequel fonctionnerait mieux. Je laisse à quelqu'un d'autre le soin de comparer :)
Le code ci-dessous peut être une alternative à IsAssignableFrom
.
parentObject.GetType().IsInstanceOfType(inheritedObject)
Voir Type.IsInstanceOfType description dans MSDN.