polymorphic resolution of generic parameters in Unity registerType

自古美人都是妖i 提交于 2019-12-01 20:56:58

You cannot do this because generics are not covariant. That is, the type itr<derived1> cannot be converted to itr<base>, even though derived1 can be converted to base.

Here's an example of why, using the framework List<T> class:

List<string> list1 = new List<string>();
list1.Add("Hello, World!");

// This cast will fail, because the following line would then be legal:
List<object> list2 = (List<object>)list1; 

// ints are objects, but they are not strings!
list2.Add(1);

So accessing list1[1] would return a boxed int in a list that was declared to contain strings.

Therefore, this cast is not allowed since it would break the type system.

(As a side note, in the clause where t : class, base, you do not need to specify class. base itself is a reference type, so the class constraint is redundant.)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!