public interface ITest {
public string? GetStr();
public void SetStr(string? s);
public string GetStrNonNull();
public void SetStrNonNull(string s);
}
public class Test : ITest {
public string GetStr() => "Hello"; // Fine!
public void SetStr(string s) { } // Warning here because you can not remove nullability on an input (i.e. parameter)
public string? GetStrNonNull() => null; // Warning here because you can not add nullability on an output (i.e. return value)
public void SetStrNonNull(string? s) { } // Fine!
}
Code snippet taken from "Two Decades of C#: A Reference - C# 8".