扩展方法

Posted 无敌小金刚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扩展方法相关的知识,希望对你有一定的参考价值。

通过扩展方法可以向类型添加功能,而不必创建DriveType或更改原始类型,他们非常适用于需要向类添加功能,但不能编辑类的情况。考虑一下Unity的内置,Transform类,我们无法访问他的源代码。假设我们想要使用函数轻松重置,Transform的位置,旋转和缩放。这个函数的理想位置是放在Transform类中,但由于不能直接向这个类进行添加,并且将这个函数添加到派生类,也没有任何意义。所以我们将为其创建扩展,扩展方法必须放在非泛型静态类中,常见做法是专门创建一个类来包含他们。扩展方法的用法与实例方法类似,他们也声明静态方法。要使函数成为扩展方法,而非静态方法,需要在参数中使用this关键字。在我们的示例中,将创建一个静态类

using UnityEngine;
using System.Collections;

//创建一个包含所有扩展方法的类
//是很常见的做法。此类必须是静态类。
public static class ExtensionMethods

    //扩展方法即使像普通方法一样使用,
    //也必须声明为静态。请注意,第一个
    //参数具有“this”关键字,后跟一个 Transform
    //变量。此变量表示扩展方法会成为
    //哪个类的一部分。
    public static void ResetTransformation(this Transform trans)
    
        trans.position = Vector3.zero;
        trans.localRotation = Quaternion.identity;
        trans.localScale = new Vector3(1, 1, 1);
    
using UnityEngine;
using System.Collections;

public class SomeClass : MonoBehaviour 

    void Start () 
        //请注意,即使方法声明中
        //有一个参数,也不会将任何参数传递给
        //此扩展方法。调用此方法的
        //Transform 对象会自动作为
        //第一个参数传入。
        transform.ResetTransformation();
    

 

以上是关于扩展方法的主要内容,如果未能解决你的问题,请参考以下文章

GroovyGroovy 扩展方法 ( 静态扩展方法配置 | 扩展方法示例 | 编译静态扩展类 | 打包静态扩展类字节码到 jar 包中 | 测试使用 Thread 静态扩展类 )

Groovy:扩展类的方法(一)

C#的扩展方法解析

GroovyGroovy 扩展方法 ( Groovy 扩展方法引入 | 分析 Groovy 中 Thread 类的 start 扩展方法 )

自定义扩展方法与框架扩展方法发生冲突。为啥?

扩展方法