一:使用场景
——对某些已经封装好的类进行扩展
——Unity中的系统类,例如GameObject类,Transform类等等,我们无法修改其源码
二:使用方法
——扩展方法必须定义为静态方法
——扩展方法必须定义在静态类中
——方法的第一个参数必须以this开头,并且指定此方法是扩展自哪个类型
——扩展方法名与该类型中定义的方法名不能相同,相同的话只能调用该类型中定义的方法
using System;
class MainClass
{
static void Main(string[] args)
{
string str = "test";
Console.WriteLine(str.ToStr());
}
}
public static class StringExt
{
public static string ToStr(this string str)
{
return "this is ext fun , " + str;
}
}
系统内部其实还是调用了一个静态方法,使用str.ToStr()与StringExt.ToStr(str)调用都可以
三:模拟链式编程
像DoTween这种链式编程的形式就是通过this关键字实现的
如下代码可以使用链式编程结构:transform.SetX(1).SetY(1).SetZ(1).ResetTrans();
using UnityEngine;
public static class ExtTest
{
public static Transform SetX(this Transform trans, float x)
{
Vector3 v = trans.position;
v.x = x;
trans.position = v;
return trans;
}
public static Transform SetY(this Transform trans, float y)
{
Vector3 v = trans.position;
v.y = y;
trans.position = v;
return trans;
}
public static Transform SetZ(this Transform trans, float z)
{
Vector3 v = trans.position;
v.z = z;
trans.position = v;
return trans;
}
public static Transform ResetTrans(this Transform trans)
{
trans.position = Vector3.zero;
return trans;
}
}