泛型转换

3

可能是重复问题:
Unity registerType中泛型参数的多态解析

这可能很明显,但有人能告诉我为什么这不是有效的代码吗? 编译器说它无法将 Class1<string> 转换为 Class1<object>。 使用这种方式进行向上转型与泛型不允许吗?如果是这样,为什么?

namespace Test
{
    public class Tests
    {
        public void Test()
        {            
            Class1<object> objectClass1 = new Class1<string>();
        }
    }
    class Class1<T>
    {
    }
}

6
这是一个常见问题,请搜索协方差。这里有一个关于该主题的讨论:https://dev59.com/iHE85IYBdhLWcg3wr1ge - JohnD
1
此外,还可以查看我对类似问题的回答,以了解为什么不允许这样做的解释。 - cdhowie
2个回答

0

不确定为什么这个回答被投票否决了,它正确地回答了提出的问题。 - Ben Robinson
@Ben:这可能解决问题,但并没有真正“回答”它。这就像向你的教授提问,然后他告诉你答案在教科书里一样。 - Gabe

-5

String、Int32等都是C#中的结构体类型,而object、Person等则是类对象。 因此,在创建泛型时,如果您计划使用强制转换功能,则必须指定约束条件。 因此,您可以使用


public void Method<T>() where T : class
or
public void Method<T>() where T : struct

这与问题完全无关。 - Gabe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接