C# 在3.5后增加了扩展方法概念,它看起来是这样的
必须在静态类内才能扩展,方法必须是静态方法。
必须使用 this 关键字对第一个参数修饰
public static class Extend { public static T SetName<T>(this T behaviour, string name)where T:MonoBehaviour { behaviour.gameObject.name = name; return behaviour; } }
假如扩展的方法只有泛型没有实际参数时
你需要指定this为非泛型
public static class Extend { public static T2 AddComponent<T2>(this MonoBehaviour behaviour) where T2 : Component { return behaviour.gameObject.AddComponent<T2>(); } } public class Test : MonoBehaviour { private void Awake() { this.AddComponent<CanvasGroup>(); } }
如果你想要对旧的类添加字段,但该添加的字段和旧的类的并没有什么关联
public class Test : MonoBehaviour { private void Awake() { this.AwakeExtend(); } private void OnDestroy() { this.DestroyExtend(); } } public static class TestExtend { static Dictionary<Test, int> m_SpeedDic = new Dictionary<Test, int>(); public static void AwakeExtend(this Test test) { m_SpeedDic[test] = 0; } public static void DestroyExtend(this Test test) { m_SpeedDic.Remove(test); } public static void SetSpeed(this Test test, int speed) { m_SpeedDic[test] = speed; } public static int GetSpeed(this Test test) { return m_SpeedDic[test]; } } public class Test2:MonoBehaviour { private void Awake() { Test test = new GameObject().AddComponent<Test>(); test.SetSpeed(123); Debug.Log(test.GetSpeed()); } }缺点是。。多了个字典