C# does not support return type covariance for the purposes of interface implementation or virtual method overrding. See this question for details:
Does C# support return type covariance?
C# does support generic covariance and contravariance of interfaces and delegate types that are constructed wtih reference types for the type arguments as of C# 4.
And C# does support return type covariance when converting a method that returns a reference type to a delegate type whose return type is a compatible reference type. (And similarly it supports parameter type contravariance.)
If this subject interests you, I have written a great many articles discussing various versions of variance that C# does and does not support. See
https://blogs.msdn.microsoft.com/ericlippert/tag/covariance-and-contravariance/
for details.