Si bien se trata de aprender Unity, sigo viendo el siguiente código para anular GetControllerInstance
en MVC:El uso de IsAssignableFrom y "es" palabra clave en C#
if(!typeof(IController).IsAssignableFrom(controllerType)) { ... }
esto me parece una forma bastante complicada de básicamente escribir
if(controllerType is IController) { ... }
aprecio existen diferencias sutiles entre is
y IsAssignableFrom
, es decir IsAssignableFrom
no incluye a las conversiones elenco, pero estoy luchando para entender la implicación de esta differenc e en escenarios prácticos.
¿Cuándo se imporantant para elegir IsAssignableFrom
sobre is
? ¿Qué diferencia habría en el GetControllerExample
?
if (!typeof(IController).IsAssignableFrom(controllerType))
throw new ArgumentException(...);
return _container.Resolve(controllerType) as IController;
Ah ok la diferencia es obvia ahora. ¡Debería haberlo visto! – fearofawhackplanet
Así que mi conjetura es que si '' U' t' y son tipos genéricos entonces 'typeof (T) .IsAssignableFrom (typeof (T))' es lo mismo que 'nuevo T() es U'? – orad
No, pero sería lo mismo que 'new U() is T'. T sería el tipo de base. Siempre me tropiezo con eso. Solo recuerdo que 'IsAssignableFrom' va en dirección opuesta al operador' is'. – Jordan