Вопрос к любознательным гуру C#.
В книге CLR via C# есть неплохой пример расширения класса StringBuilder, цель автора воссоздать метод IndexOf, который есть у простого string.
public static class StringBuilderExtensions
{
public static Int32 IndexOf(this StringBuilder sb, char value)
{
for (int index = 0; index < sb.Length; index++)
if (sb[index] == value) return index;
return -1;
}
}
Взяв за основание этот пример, захотелось попробовать реализовать нечто подобное для класса Array.
Например для вывода в консоль содержащихся в массиве данных пробую сделать следующее:
public static class ArrayExtensions
{
public static String ToString(this int[] arr)
{
string str = "";
for(int i = 0; i < arr.Length-1; i++)
str += arr[i] + " ";
return str;
}
}
Только вот попытка вызвать неявный ToString(), вызывает стандартный GetType.ToString(). Как можно обойти это ограничение? Переопределить неявное преобразование?
Код вызова из программы:
int[] arr = new int[5]{23,24,66,33,7};
Console.WriteLine(arr);
При одинаковых именах встроенные (в класс или в его родителей) методы имеют приоритет перед методами расширения. Выход - используйте другое имя. Либо вызывайте его так: ArrayExtensions.ToString(arr); (хотя смысла в этом мало)
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости