为什么受约束的返回类型需要显式转换?

Mar*_*ius 1 c# generics polymorphism

为什么像这样的方法需要显式转换返回类型?

    public T Test<T> ()
        where T : Response
    {
        var ret = new Response ();

        return ret; // Explicit cast needed here
    }
Run Code Online (Sandbox Code Playgroud)

该约束明确指出 T 是 Response 或其子代,因此返回类型多态性应该允许无需强制转换,或者我是这么认为的。

添加as T允许编译通过。

Iva*_*gas 5

T是 的子类Response,意思是每个T都是 aResponse但不是每个Response都是 a T。这就是为什么你需要一个明确的演员。