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());}}
相关文章推荐
- C# 3.0新特性初步研究 Part2:使用扩展方法
- C# 3.0新特性初步研究 Part2:使用扩展方法_C#教程
- 关于unity使用dll和c#扩展方法的小结
- c# 3.0新特性之使用扩展方法
- C# 3.0新特性初步研究 Part2:使用扩展方法_C#教程
- C#学习笔记(三)—–C#高级特性:扩展方法
- 一个例子帮你搞懂C#语言高级特性系列(03) --- 方法扩展
- C# 3.0新特性初步研究 Part2:使用扩展方法_C#教程
- 步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- C#3.5语言新特性(四)-扩展方法
- c#扩展方法奇思妙用高级篇二:Aggregate扩展其改进
- C# 3.0语言新特性(语言规范):2 扩展方法
- 使用C#的Partial特性进行功能扩展
- C# 3.0 新特性:扩展方法初探(转)
- c#扩展方法奇思妙用高级篇一:改进 Scottgu 的 "In" 扩展
- c# 扩展方法奇思妙用高级篇五:ToString(string format) 扩展
- c#扩展方法奇思妙用高级篇三:Enumerable.Cast应用
- c# 扩展方法奇思妙用高级篇二:Aggregate 扩展及其改进
- C# 3.0 新特性:扩展方法初探
- c# 扩展方法奇思妙用高级篇三:Enumerable.Cast<T> 应用