QFrameWork学习(七) 静态扩展 + 泛型实现transform的链式编程

public static MonoBehaviour Position(this MonoBehaviour selfBehaviour, Vector3 position) 
 {
     selfBehaviour.transform.position = position;
     return selfBehaviour;、
 }

 public static MonoBehaviour LocalScale(this MonoBehaviour selfBehaviour, float xyz)
 {
      selfBehaviour.transform.localScale = Vector3.one * xyz;
     return selfBehaviour;
}

public static MonoBehaviour Rotation(this MonoBehaviour selfBehaviour, Quaternion rotation)
 {
      selfBehaviour.transform.rotation = rotation;
      return selfBehaviour;
 }

  this.Position(Vector3.one)            
      .LocalScale(1.0f)                
      .Rotation(Quaternion.identity);

       将Monobehaviour写三个扩展方法,按照上篇文章那样的手法,就可以实现如上这种链式编程。但是有个问题,我们这里返回的是monobehaviour类型,并不是实际上继承Monobehaviour的自定义脚本类型,所以后面我们自己写的方法也就无法调用。

       那有个方法,就是使用泛型:

public static T Position(this T selfBehaviour, Vector3 position) where T : MonoBehaviour
{
    selfBehaviour.transform.position = position;
    return selfBehaviour;
}

public static T LocalScale(this T selfBehaviour, float xyz) where T : MonoBehaviour
{
    selfBehaviour.transform.localScale = Vector3.one * xyz;
    return selfBehaviour;
}

public static T Rotation(this T selfBehaviour, Quaternion rotation) where T : MonoBehaviour
{
    selfBehaviour.transform.rotation = rotation;
    return selfBehaviour;
}

      但是不止是这样,UGUI的Image那种,也得可以实现这种链式编程,所以再一次完善,把后面的Monobehaviour改为Component,就可以兼容所有组件了。

你可能感兴趣的:(框架,QFramework)