有没有可能创build构造函数扩展方法? 怎么样?
有没有可能添加一个构造函数的扩展方法? 我想添加一个List <T>构造函数来从给定的部分填充的缓冲区中接收特定数量的字节(不需要仅复制相关字节等的开销):
... 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]); }
我也想做一个构造函数。 可能吗 ? 如果是 – 如何?
不,但是如果你改变你的AddRange
签名来返回列表实例,那么你至less可以这样做
var list = new List<int>().AddRange(array, n);
无论如何,这个imho可能比重载构造函数更清晰。
SWeko的答案基本上是正确的,虽然他链接到的文章是关于扩展属性而不是扩展构造函数。
我们在扩展属性的同时也做了扩展构造函数的粗略devise; 他们将是一个很好的工厂模式的语法糖。 但是,他们从来没有超越devise阶段。 该function虽然很好,但并不是真正必要的,并且不能启用任何令人敬畏的新场景。
如果你有一个真正令人敬畏的问题,扩展构造函数将解决,我很乐意听到更多的细节。 我们得到的现实世界反馈越多,我们就越能评估我们每年获得的数百个不同functionbuild议的相对优点。
一句话 – 不。 看看这个一些解释。
他们从C#3function列表中删除,然后从C#4function列表中删除,我们只能希望他们能够制作C#5function,但我不太乐观。
我知道这是一个凹凸,只是想指出你可以inheritanceList类,并做这样的事情:
class List<T> : System.Collections.Generic.List<T> { public List(T[] a, int n) : base() { AddRange(a, n); } }