OverloadResolutionPriority
Больший приоритет выигрывает
при споре перегрузок. Метод со
string с приоритетом
1 выбирается вместо
ReadOnlySpan<char>.
Нужен
System.Runtime.CompilerServices.
Синтаксис
[OverloadResolutionPriority(1)]
static string Pick(string value)
{
return value;
}
Пример
Давайте вызвать Pick
со строкой abcde:
using System;
using System.Runtime.CompilerServices;
class Program
{
[OverloadResolutionPriority(1)]
static string Pick(string value)
{
return value;
}
static string Pick(ReadOnlySpan<char> value)
{
return "12345";
}
static void Main()
{
string res = Pick("abcde");
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте вызвать перегрузку
со ReadOnlySpan явно:
using System;
using System.Runtime.CompilerServices;
class Program
{
[OverloadResolutionPriority(1)]
static string Pick(string value)
{
return value;
}
static string Pick(ReadOnlySpan<char> value)
{
return "12345";
}
static void Main()
{
ReadOnlySpan<char> text = "abcde";
string res = Pick(text);
Console.WriteLine(res);
}
}
Результат выполнения кода:
"12345"
Пример
Давайте прочитать приоритет строковой перегрузки:
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
class Program
{
[OverloadResolutionPriority(1)]
static string Pick(string value)
{
return value;
}
static string Pick(ReadOnlySpan<char> value)
{
return "12345";
}
static void Main()
{
MethodInfo method = typeof(Program).GetMethod(
"Pick",
new Type[] { typeof(string) });
OverloadResolutionPriorityAttribute item = method
.GetCustomAttribute<OverloadResolutionPriorityAttribute>();
int res = item.Priority;
Console.WriteLine(res);
}
}
Результат выполнения кода:
1
Смотрите также
-
CollectionBuilder,
литерал коллекции -
Conditional,
условный вызов -
Attribute,
базовый класс -
Атрибут,
обзор