I believe that there is a little mistake on this part of C# documentation! But i'm not sure. Is it really a documentation mistake? or maybe am i wrong?
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/interfaces#variance-safety
instead of:
Xi is contravariant or invariant and Ai is input-safe.
it should be:
Xi is contravariant or invariant and Ai is input-UNsafe.
// test code 1
interface I1<out T>{ // T is covariant -> input-UNsafe
I2<T> test1(); // error, I2<T> is output-unsafe! which proves my point
}
interface I2<in P> { } // P is contravariant!
I am using Visual Studio 16.7.2, Console App (.Net Framework) C# 7.3