Можно ли создать конструктор-расширение-метод? как?
можно ли добавить метод расширения конструктор ? Я хочу добавить конструктор List для получения определенного количества байтов из заданного частично заполненного буфера (без накладных расходов на копирование только соответствующих байтов и т. д.):
...
public static List<T>(this List<T> l, T[] a, int n)
{
for (int i = 0; i < n; i++)
l.Add(a[i]);
}
...
Так что использование будет:
List<byte> some_list = new List<byte>(my_byte_array,number_of_bytes);
Я уже добавил метод расширения AddRange:
public static void AddRange<T>(this List<T> l, T[] a, int n)
{
for (int i = 0; i < n; i++)
l.Add(a[i]);
}
Я тоже хочу сделать это как конструктор. Возможно ли это ? если да-то как ?
4 ответа:
нет, но если вы изменили свой
AddRange
подпись для возврата экземпляра списка, то вы могли бы по крайней мере сделатьvar list = new List<int>().AddRange(array, n);
который imho, вероятно, яснее, чем перегрузка конструктора в любом случае.
ответ СВЕКО в основном правильный, хотя, конечно, статья, на которую он ссылается, касается свойств расширения, а не конструкторов расширения.
мы также сделали грубый дизайн для конструкторов расширения в то же время, что и свойства расширения; они были бы хорошим синтаксическим сахаром для заводского шаблона. Тем не менее, они никогда не проходили стадию проектирования; функция, хотя и приятная, на самом деле не нужна и не позволяет создавать новые потрясающие сценарии.
Если у вас есть действительно удивительная проблема, которую решат конструкторы расширений, я был бы рад услышать больше деталей. Чем больше реальных отзывов мы получаем, тем лучше мы можем оценить относительные достоинства сотен различных предложений функций, которые мы получаем каждый год.
одним словом - нет. Взгляните на этой для некоторого объяснения.
Они были вырезаны из списка функций C# 3, затем они были вырезаны из списка функций C# 4, и мы можем только надеяться, что они смогут сделать функции C# 5, но я не очень оптимистичен.