你指定T是in,所以这个接口是逆变的, 假设有如下定义:
IDisplay<String> myString;
IDisplay<Object> myObject ;
则这个赋值句就是合法的:
myString = myObject;
所以myObject.Foo()的返回对象一定可以赋值给myString.Foo() 返回类型的变量。但是你直接指定了T, myString返回的就是String, myObject返回的是Object,这个赋值就是逆变的,但是C#需要他是协变的,所以就是他说的那个错误