要在C#中使用类型的拓展方法,可在一个类中中通过指定static的方法,将Type通过this方式作为第一个参数传入,如给Random增加一个NextFloat方法
public static class Extension { public static byte[] NextBytes(this Random r, int length) { var data = new byte[length]; r.NextBytes(data); return data; } public static float NextFloat(this Random r, int length) { return BitConverter.ToSingle(NextBytes(r, 4), 0); } }
如果拓展的函数和原函数重名的话,则在类以外不产生效果。如上述的NextBytes在Extension外是不生效的。
要实现该效果,有三点要求:
1. 声明该拓展方法的Class必须是static、non-generic和non-nested的
2. 拓展方法必须是static
3. 类型的传入参数必须位于第一个,且以this标明