Eu sei de ise aspara instanceof, mas e o método reflexivo isInstance () ?
Eu sei de ise aspara instanceof, mas e o método reflexivo isInstance () ?
Respostas:
O equivalente do Java obj.getClass().isInstance(otherObj)em C # é o seguinte:
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
Observe que, embora Java e C # funcionem no objeto do tipo runtime (Java java.lang.Class≣ C # System.Type) de um obj(via .getClass()vs .getType()), o Java isInstanceleva um objeto como seu argumento, enquanto o C # IsAssignableFromespera outro System.Typeobjeto.
isexigia um nome de tipo, em contraste. Isso é o que o OP queria: o equivalente do Java isInstance. A outra resposta está simplesmente errada, apesar do número ridículo de votos positivos.
bool result = (obj is MyClass); // Better than using 'as'
new Child() is Parent)
Depende, use isse não quiser usar o resultado do gesso e use asse quiser. Você dificilmente quer escrever:
if(foo is Bar) {
return (Bar)foo;
}
Ao invés de:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
logo de cara, você também pode fazer:
bool result = ((obj as MyClass) != null)
Não tenho certeza de qual teria melhor desempenho. Vou deixar para outra pessoa fazer o benchmark :)
O código abaixo pode ser uma alternativa para IsAssignableFrom.
parentObject.GetType().IsInstanceOfType(inheritedObject)
Consulte a descrição de Type.IsInstanceOfType no MSDN.