Unity使用C#高级特性扩展方法

来源:互联网 发布:液晶电视清晰知乎 编辑:程序博客网 时间:2024/05/07 08:06

C#扩展方法

最近在工作中遇到一个问题,即在不修改原始类的情况下,为类添加新的方法和属性,于是在C#的高级特性中发现了解决方案:扩展方法

下面的扩展方法的定义:

             扩展方法有两个限制:1 方法必须的定义在静态类中(类中所有的扩展都是静态的);2 所有扩展方法都需要使用this关键字对第一个参数(并且仅对第一个参数)进行修饰(用this限定的参数表示被扩展的项);下面的这个类中定义了两个扩展方法:

using System;using System.Reflection;/// <summary>/// C#高级特性扩展方法学习/// </summary>public static class Sample {    // 本方法任何对象显示它所处的程序集//    public static void DisplayDefiningAssembly(this object obj) {       Debug.Log(obj.GetType().Name + "lives here: => " +Assembly.GetAssembly(obj.GetType()).GetName().Name);    }    // 本方法允许任何整形返回倒置的副本,例56返回65//    public static int ReverseDigits(this int i) {        //把int翻译成string然后获取所有的字符串 //        char[] digts = i.ToString().ToCharArray();                //反转数组的项//        Array.Reverse(digts);        // 放回string//        string newDigts = new string(digts);        //使用int值返回修改后的字符串//        return int.Parse(newDigts);    }}




每个扩展方法的第一个参数类型前都使用了关键字this,大多数情况下扩展方法的第一个参数表示被扩展的类型

DisplayDefiningAssembly()被定义为用于扩展System.Object,所以这个程序集中所有的对象都是使用这个扩展方法,Reverse()方法只被定义用作整数类型,

下面的具体的调用:

public class ExtensionMethod : MonoBehaviour {        void Start() {        int myInt = 1234567;        myInt.DisplayDefiningAssembly();        string myString = "I'm a string";        myString.DisplayDefiningAssembly();        //使用int的新功能//        Debug.Log("Value of myInt:" + myInt.ToString());        Debug.Log("Reverse digts of myInt: " + myInt.ReverseDigits());    }}


                                             
0 0
原创粉丝点击