扩展方法在实现上和普通的面向对象编程是一样的,换句话说,我们只需要定义一个类,然后在里面添加并实现相应的方法即可。但是这里需要注意的地方有三点,第一,实现扩展方法的类必须是静态类且类的名称和实现扩展方法的类无关;第二、实现扩展方法的类方法必须是静态方法;第三、实现扩展方法的类方法的第一个参数必须是使用this关键字指明要实现扩展方法的类。例如,我们知道将一个合法字符串类型转换为整型,可以使用int.parse()方法,假如我们希望为string类型扩展一个ToInt方法应该怎么办呢?我们一起来看下面的这段代码:
using UnityEngine;
using System.Collections;
/// <summary>
/// 扩展类使用方法:
/// 0、需要注意的是C#支持扩展方法是从.NET3.5版本开始
/// 1、类和方法都必须是静态的
/// 2、在方法中的参数前面必须加关键字 this
/// 3、调用时直接使用 string str = "123"; int d = str.ToInt ();
/// </summary>
public static class Testt {
/// <summary>
/// 扩展 强制转换int方法
/// </summary>
/// <returns>The int.</returns>
/// <param name="str">String.</param>
public static int ToInt(this string str){
return int.Parse (str);
}
/// <summary>
/// 扩展强制转换Transform.position 的世界坐标
/// </summary>
/// <param name="tempPosition">Temp position.</param>
/// <param name="valueX">Value x.</param>
public static void SetPositionX(this Transform tempPosition,float valueX){
tempPosition.position = new Vector3 (valueX,tempPosition.position.y,tempPosition.position.z);
}
/// <summary>
/// 扩展强制转换Transform.position 的局部坐标
/// </summary>
/// <param name="mTransform">M transform.</param>
/// <param name="valueX">Value x.</param>
public static void SetLocalPositionX(this Transform mTransform,float valueX){
mTransform.position = new Vector3 (valueX,mTransform.position.y,mTransform.position.z);
}
}
小结
在C#中实现扩展方法的类必须是静态类且类的名称和实现扩展方法的类无关
实现扩展方法的类方法必须是静态方法
实现扩展方法的类方法的第一个参数必须是使用this关键字指明要实现扩展方法的类
实现扩展方法应遵守就近原则,在最小的范围内使用扩展方法以避免造成“污染”