C# 中匿名函数的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
C# 匿名函数
//匿名函数 varp1=new{Name="张三",Age=28}; varp2=new{Name="李四",Age=29}; varintArr=new[]{1,2,3,4,5};
首先我们来看一下上面这段代码,比较简单,和我们平时定义一个实例基本没什么区别,只是new后面没有跟具体定义的类型;这里我们使用new关键字调用匿名初始化器创建了一个匿名类型对象; 匿名类型直接继承自System.Object;匿名类型的成员是编译器根据初始化器推断而来的一些读写属性。
这里我们注意到C# 匿名函数基本上是配合隐式类型var来使用的,而且定义的顺序也是一定要注意,上面p1和p2初始化时定义的属性名、类型和顺序一致,因此编译器认为他们是同一个类型,可以使用p1=p2这样的赋值语句;特别是顺序需要注意,如果初始化时名称类型一致而顺序不一致,则p1和p2就是两个类型,如果使用p1=p2则编译时会抛出错误 :无法将类型“AnonymousType#1”隐式转换为“AnonymousType#2” .定义匿名函数时还需要注意,不能用null赋初始值。
C# 匿名函数解析:匿名函数的基础是对象初始化器,匿名类型从对象初始化器(object initializer)自动推断和生成的元组类型。下面我们来看看匿名函数到底怎么生成的和我们原来的定义方式有什么区别:var p1 = new {Name="张三",Age=28};我们给p1赋了一个匿名类型,在编译时,编译器使用对象初始化器推断的属性来创建见一个新的匿名类型,该类型拥有Name和Age的属性,在运行时,会创建新类型的一个实例同时Name和Age属性将会被设置为对象初始化器中指定的值“张三”、28;和上面几节里描述的一样这里大家一定会想到,肯定又是在编译器里封装了一些处理;确实是这样,下面这段代码描述编译器针对匿名函数语句具体做了哪些工作:
class__Anonymous1 { privatestringname; privateintage; publicstringName{get{returnname;}set{name=value;}} publicintAge{get{returnage;}set{age=value;}} } __Anonymous1p1=new__Anonymous1(); p1.Name="张三"; p1.Age=28;
这段代码就是我们非常熟悉的写法,编译器就是在后台依据匿名函数解析类型,创建新类,初始化对象;如果你创建了多个相似的匿名类型,C#编译器会聪明的发现这一点,只生成一个类和它的多个实例;小结匿名函数多数是和var隐式类型一起使用,因此多在局部(方法内部)内使用。同样匿名函数是编译器编译时创建,内部实现与我们原来的写法没有本质区别。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。