匿名属性 anonymous property
利用匿名属性可以用很简洁的语法来自动声明不可变(immutable)的元组(tuple)类型。
属性:在字段用来表示类型和对象的状态的前提下,希望状态不被随意的更改,字段一般应该设置为private,这也符合面向对象编程的数据封装,而可以通过方法来更改字段的值,这时候属性的出现简化了这些语法。
var o=new {property1 = expression1, ....,propertyN = expressionN}
编译器会推断每个表达式的类型,创建推断类型的私有字段,为每个字段创建公共只读属性,并创建一个构造器来接受这些表达式。在构造器中根据表达式结果来初始化私有只读字段。
除此之外,还会重写Objects的Equals,GethashCode和ToString方法。属性只读防止HashCode被改,而匿名实例能放在哈希表集合中,就防止了哈希码被改后找不到key。
var people = new[]
{
new {Name = "James", Age=}
new {Name = "Obama", Age=}
}
匿名类型经常被用与LINQ(Language Intergrated Query)配合使用。
string myDocs=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var query=
from pathname in Directory.GetFiles(myDocs)
let LastWriteTime = File.GetLastWriteTime(pathname)
where LastWriteTime > (DateTime.Now - TimeSpan.FromDays())
orderby LastWriteTime
select new {Path = pathname, LastWriteTime }
Path = pathname也不是必要的,即之后的属性名就为pathname,这个前面只是定义属性名,倘若不定义就为原名。
System.Tuple:
public class Tuple<T1,T2,T3,T4,T5,T6,T7,TRest>
var t=Tuple.Create(,,,,,,,Tuple.Create(,))
System.Dynamic.ExpandoObject
dynamic e = new System.Dynamic.ExpandoObject();
e.x = ;
e.y = "Henry";
e.z = null; foreach (var v in (IDictionary<string,Object>)e)
{
Console.WriteLine(v.Key+v.Value);
}
匿名属性 anonymous property的更多相关文章
- C#匿名类型 - Anonymous Types
[C#匿名类型 - Anonymous Types] Anonymous types provide a convenient way to encapsulate a set of read-onl ...
- Android属性(property)机制
1. 属性简介 Android里有很多属性(property),每个属性都有一个名称和值,他们都是字符串格式.这些属性定义了Android系统的一些公共系统属性.比如: [dalvik.vm.dexo ...
- Python进阶之“属性(property)”详解
Python中有一个被称为属性函数(property)的小概念,它可以做一些有用的事情.在这篇文章中,我们将看到如何能做以下几点: 将类方法转换为只读属性 重新实现一个属性的setter和getter ...
- Android动画主要包含补间动画(Tween)View Animation、帧动画(Frame)Drawable Animation、以及属性动画Property Animation
程序运行效果图: Android动画主要包含补间动画(Tween)View Animation.帧动画(Frame)Drawable Animation.以及属性动画Property Animatio ...
- php中的匿名函数(Anonymous functions)和闭包函数(closures)
一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数.最常用的就是回调函 ...
- Objective-C:属性(@property)
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- C# 属性(Property)和字段(Field)的区别
导读: 近期学习过程中发现了一些问题,我的学习只是学习,敲代码就是敲代码,没有加入思考,也不问为什么就直接去敲人家写好的例子去敲,把知识都学死了,逐渐散失了思考能力,所以学习的兴趣大打折扣,正如那句话 ...
- 始终使用属性(Property),而不是字段(Data Member)
1.始终使用属性(Property),而不是字段(Data Member) C# 属性已经晋升为一等公民,如果你的类中还有public的字段,Stop.访问属性和字段的方式是一样的,但是属性是用方法( ...
- python基础-abstractmethod、__属性、property、setter、deleter、classmethod、staticmethod
python基础-abstractmethod.__属性.property.setter.deleter.classmethod.staticmethod
随机推荐
- xmlplus 组件设计系列之八 - 分隔框(DividedBox)
分隔框(DividedBox)是一种布局类组件,可以分为两类,其中一类叫水平分隔框(HDividedBox),另一类叫垂直分隔框(VDividedBox).水平分隔框会将其子级分为两列,而垂直分隔框则 ...
- [进程通信] Linux进程间通信(IPC)
简介 linux下进程间通信的几种主要手段: 1. 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...
- Quartz (二) 和Spring整合
先给个场景:每五分钟扫描并关闭7天未付款的订单 1.quartz pom.xml依赖 <dependencies> <dependency> <groupId>or ...
- 工具类总结---(五)---SD卡文件管理
里面注释很清楚了... package cgjr.com.cgjr.utils; import android.content.Context; import android.graphics.Bit ...
- 0基础搭建Hadoop大数据处理-编程
Hadoop的编程可以是在Linux环境或Winows环境中,在此以Windows环境为示例,以Eclipse工具为主(也可以用IDEA).网上也有很多开发的文章,在此也参考他们的内容只作简单的介绍和 ...
- web基础之会话技术
一.会话技术之Cookie Cookie技术是将数据存储到客户端 1.怎样去向客户端写出一个cookie 1)创建Cookie对象 Cookie cookie = new Cookie(name,va ...
- Nginx http和https 共存
nginx https 配置,添加证书启动https server { listen default_server; listen ; server_name _; ssl on; ssl_certi ...
- 【JAVAWEB学习笔记】09_MySQL多表&JDBC(包含MySQL数据库思维导图)
今天晨读单词: order:订单constraint:(强制)约束foreign key:外键references:指向orderitem:订单项join:加入resourceBundle:资源捆绑c ...
- Python下划线的使用
References: [1]. http://python.jobbole.com/81129/ 本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划 ...
- c++堆与栈的简单认识
堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并将该结点的空间分配给程序,另外,对于大多数 ...