.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"); }
■ 下位互換で活躍
ライブラリなどをアップデートするときに下位互換を維持しながら新機能 (新メソッド) を追加するときなどに活躍すると思います。
しっかり使いこなして行きましょう。