rksoftware

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

C# 13 の新機能「OverloadResolutionPriority 属性」その 2

.NET 9 Preview 7 で C# 13 の新機能「OverloadResolutionPriority」属性が追加されました。
オーバーロードの解決の優先順位を操作できる属性のようです。
今回はそのお試しその 2 です。

その 1、3 はこちら

rksoftware.hatenablog.com rksoftware.hatenablog.com

■ 実例その 2

前回はデフォルト値 (省略可能な引数) を持つメソッドの優先順をいじってみました。今回は引数の型を見てみます。
前回同様素直な思った通りの動作ですね。いいですね。

Class1.Test((int)1);    // Class1:   ,  : short/ 標準のルールで short が選択された
Class2.Test((int)1);    // Class1: -1,  : long/ 優先度を指定して long が選択されるようにした

static class Class1
{
    public static void Test(short a) => Console.WriteLine("Class1:   ,  : short");
    public static void Test(long a) => Console.WriteLine("Class1:   ,  : long");
}

static class Class2
{
    [System.Runtime.CompilerServices.OverloadResolutionPriority(-1)]
    public static void Test(short a) => Console.WriteLine("Class1: -1,  : short");
    public static void Test(long a) => Console.WriteLine("Class1: -1,  : long");
}

■ 下位互換で活躍

ライブラリなどをアップデートするときに下位互換を維持しながら新機能 (新メソッド) を追加するときなどに活躍すると思います。
しっかり使いこなして行きましょう。