在尝试学习Unity时,我一直看到 MVC 中重写 GetControllerInstance
的以下代码:
if(!typeof(IController).IsAssignableFrom(controllerType)) { ... }
这对我来说似乎是一种相当复杂的方式,基本上是在编写
if(controllerType is IController) { ... }
我理解is
和IsAssignableFrom
之间存在微妙的区别,即IsAssignableFrom
不包括强制类型转换,但我很难理解这种差异在实际场景中的影响。
在何时选择IsAssignableFrom
比is
更重要?在GetControllerExample
中会有什么区别?
if (!typeof(IController).IsAssignableFrom(controllerType))
throw new ArgumentException(...);
return _container.Resolve(controllerType) as IController;
T
和U
是泛型类型,那么typeof(T).IsAssignableFrom(typeof(U))
与new T() is U
是相同的吗? - oradnew U() is T
相同。T 将是基本类型。我总是被这个绊倒。我只记得IsAssignableFrom
与is
操作符相反。 - Jordan