Je connais is
et as
pour instanceof
, mais qu'en est-il de la méthode réfléchissante isInstance()?Quel est le C# équivalent à isInstance() de Java?
Répondre
L'équivalent de Java de obj.getClass().isInstance(otherObj)
en C# est la suivante:
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
Notez que si Java et C# travail sur l'objet de type d'exécution (Java java.lang.Class
≣ C# System.Type
) d'un obj
(via .getClass()
vs .getType()
), Java isInstance
prend un objet comme argument, tandis que IsAssignableFrom
de C# attend un autre objet System.Type
.
juste à côté du haut de ma tête, vous pouvez aussi le faire:
bool result = ((obj as MyClass) != null)
Je ne sais pas qui mieux performer. Je vais laisser à quelqu'un d'autre référence :)
bool result = (obj is MyClass); // Better than using 'as'
Cela fonctionne-t-il même pour les classes qui utilisent l'héritage? ('new Child() est Parent') –
oui oui, exactement comment vous montrez ci-dessus –
testé ici, cela fonctionne pour les classes que l'héritage des utilisateurs. Merci mec. –
depends, utilisez is
si vous ne voulez pas utiliser le résultat de la distribution et l'utilisation as
si vous le faites. Vous presque jamais envie d'écrire:
if(foo is Bar) {
return (Bar)foo;
}
Au lieu de:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
Ci-dessous le code peut être une alternative à IsAssignableFrom
.
parentObject.GetType().IsInstanceOfType(inheritedObject)
Voir la description de Type.IsInstanceOfType dans MSDN.
- 1. Quel est l'équivalent VB des instanceof et isInstance() de Java?
- 2. Quel est le C# équivalent à l'instruction With dans VB?
- 3. Quel est le C# équivalent de public final statique en Java
- 4. C# équivalent à DigestUtils.md5Hex de Java (chaîne)?
- 5. C++ équivalent de Java ByteBuffer?
- 6. Quel est le C++ géré équivalent à C# en utilisant la déclaration
- 7. Quel est l'équivalent C# de Java DecimalFormat?
- 8. Java équivalent à
- 9. C# Java HashMap équivalent
- 10. Quel est le LINQ pour XML équivalent pour cette XPath
- 11. Équivalent Objective-C de BlockingQueue de Java?
- 12. C# C équivalent à l'union
- 13. équivalent Java de C# 's Rfc2898DerivedBytes
- 14. Java Map équivalent en C#
- 15. Quel est l'équivalent C# de java.util.regex?
- 16. Java équivalent à pyftpdlib?
- 17. Java équivalent à WPF
- 18. L'utilisation de isinstance
- 19. C# équivalent du mot-clé Java 'implémente'?
- 20. C# équivalent de Java par exemple initialiseur
- 21. Quel est l'équivalent de l'objet d'application java?
- 22. Quel est le code équivalent pour window.location dans jQuery?
- 23. Quel est l'équivalent de AbstractMap de Java en C#?
- 24. Java équivalent à .NET System.Net.ServicePointManager
- 25. C# équivalent de getClassLoader() getResourceAsStream (...)
- 26. Existe-t-il un équivalent C# à File.separator en Java?
- 27. Quel est l'équivalent de l'énumération de Java en C#?
- 28. Quel est l'équivalent C# de static {...} en Java?
- 29. comment isinstance (x, module)?
- 30. Quel est l'équivalent de IntPtr (C#) en Java?
note IsAssignableFrom prend un type, pas un objet, donc vous devez réellement faire OtherObj.getType(). – FlySwat
Merci Jon - et rappelez-vous, ceci est un wiki! Je ne veux pas que les gens corrigent mes erreurs. –
intéressant ... en java, la JVM traite spécialement "instanceof", apparemment très très rapidement, ce qui peut expliquer pourquoi c'est exceptionnellement un mot-clé (il existe aussi une méthode isAssignable en java). –