rksoftware

Visual Studio とか C# とかが好きです

C# 2.0 以降の新機能の確認 - C# 9.0 - 共変の戻り値の型

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

共変の戻り値の型

 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/override
 戻り値の型を共変できる。override したメソッドの戻り値の型を、スーパークラスのメソッドの戻り値の型のサブクラスにできる。

A a = new B();
IEnumerable<int> list = a.Method(); // return 値の型は List<int>

internal class A
{
    public virtual IEnumerable<int> Method() { return null; }
}

internal class B : A
{
    // 以前は戻り値の型を変えられなかった。今はサブクラスに変えられる
    public override List<int> Method() { return new List<int>(); }
}