C#扩展方法的实现

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修饰,它表示被扩展对象的实例。
  • 建议较少的使用扩展方法,因为在转语言或者换架构的时候,他可能会出现问题