Closed CaptainFamicon closed 4 months ago
https://ufcpp.net/blog/2024/2/overload-resolution-priority/ ページ下部の OverloadResolutionPriority 属性に関する記述の部分です。
OverloadResolutionPriority
C.M(ReadOnlySpan<int>) の方が選ばれるようにしたいため、配列のオーバーロードの方の優先度を -1 にすべきかと思われます。
C.M(ReadOnlySpan<int>)
-1
int[] x = [1, 2, 3]; // ReadOnlySpan<int> の方が選ばれるようになる予定。 C.M(x); public class C { - // 優先度を上げたければ priority の数字を増やす。 + // 優先度を下げたければ priority の数字を減らす。 - [OverloadResolutionPriority(1)] + [OverloadResolutionPriority(-1)] public static void M(int[] x) { } - // 逆にこっちに priority = -1 とかを与えて優先度を下げるとかでも OK。 + // 逆にこっちに priority = 1 とかを与えて優先度を上げるとかでも OK。 public static void M(ReadOnlySpan<int> x) { } } public class OverloadResolutionPriorityAttribute(int priority) : Attribute { public int Priority { get; } = priority; }
以下は個人的に思ったことです。
元の提案が「上げる方」から書いてるんですよね。
それに合わせたけども M(int[] x) と M(ReadOnlySpan<int> x) の順番逆だった… というのがミスの原因ではあるんですが。
M(int[] x)
M(ReadOnlySpan<int> x)
数字を増やす方、「元のライブラリはいじらずに、高プライオリティの拡張メソッドを足す」とかに使えるんですかね? それがいいのか悪いのか… できるようになるのかどうか。
まあ、順序を入れ替え。
https://ufcpp.net/blog/2024/2/overload-resolution-priority/ ページ下部の
OverloadResolutionPriority
属性に関する記述の部分です。C.M(ReadOnlySpan<int>)
の方が選ばれるようにしたいため、配列のオーバーロードの方の優先度を-1
にすべきかと思われます。以下は個人的に思ったことです。
OverloadResolutionPriority
属性を付け、同じ優先度を設定する必要があります。