您的位置:首页 > 移动开发 > Unity3D

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

2014-10-23 16:33 387 查看
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());}}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息