C#在.NET 3.0的时候,新增了一个扩展方法的概念,它可以在不更改原始类结构函数的基础上,加入新的扩展函数。扩展方法这个概念本质上是属于C#的,但是由于测试环境是U3D,所以也测试了部分基于U3D类型的扩展方法。
示例
using UnityEngine;
public static class Editor
{
public static void Log(this string str)
{
UnityEngine.Debug.Log(str);
}
public static void LogFormat(this string str, params object[] values)
{
UnityEngine.Debug.LogFormat(str, values);
}
public static string GetName(this Transform node)
{
return node ? node.name : "";
}
public static void Destory(this Transform node)
{
GameObject.Destroy(node.gameObject);
}
}
public class Main : MonoBehaviour
{
private void Awake()
{
"aaa".Log();
"{0} - {1} - {2}".LogFormat("参数一", 2, transform.GetName());
transform.Destory();
}
private void OnDestroy()
{
print("我被销毁了");
}
}
Tip
- 扩展方法是.NET 3.0之后才新增的特性
- 扩展方法定义的类必须是静态类,函数也需要是静态函数
- 扩展方法只可以进行扩展类,无法重写已经定义过的函数,也无法重写自身
- 扩展方法无法访问被扩展对象的私有变量
- 扩展方法至少存在一个参数,并以this修饰,它表示被扩展对象的实例。
- 建议较少的使用扩展方法,因为在转语言或者换架构的时候,他可能会出现问题