对象初始值
为解决这一问题,即将发布的“Orcas”版本提供了一种被称为对象初始值的C#语言功能。对象初始值主要允许在单一表达式中为多个属性或字段赋值。例如,创建对象的常见模式是:
Customer customer = new Customer(); |
此时,Customer没有可以接受名称和地址的构造函数;但是存在两个属性,即Name和Address,当创建实例后即可设置它们。对象初始值允许使用以下语法创建相同的结果:
Customer customer = new Customer() |
在我们前面的CustomerTuple示例中,我们通过调用其构造函数创建了CustomerTuple类。我们也可以通过对象初始值获得同样的结果:
var locals = |
请注意,对象初始值允许省略构造函数的括号。此外,字段和可设置的属性均可在对象初始值的主体内部进行赋值。
我们现在已经拥有在C#中创建查询的简洁语法。尽管如此,我们还有一种可扩展途径,可通过扩展方法以及一组本身非常有用的语言功能来添加新的运算符(Distinct、OrderBy、Sum等)。
语言设计团队现在有了数种可赖以获得反馈的原型。因此,我们与许多富于C#和SQL经验的参与者组织了一项可用性研究。几乎所有反馈都是肯定的,但明显疏忽了某些东西。具体而言,开发人员难以应用他们的SQL知识,因为我们认为理想的语法与他们擅长领域的专门技术并不很符合。
查询表达式
于是,语言设计团队设计了一种与SQL更为相近的语法,称为查询表达式。例如,针对我们的示例的查询表达式可如下所示:
|
查询表达式是基于上述语言功能构建而成。它们在语法上,完全转换为我们已经看到的基础语法。例如,上述查询可直接转换为:
var locals = |
查询表达式支持许多不同的“子句”,如from、where、select、orderby、group by、let和join。这些子句先转换为对等的运算符调用,后者进而通过扩展方法实现。如果查询语法不支持必要运算符的子句,则查询子句和实现运算符的扩展方法之间的紧密关系很便于将两者结合。例如:
var locals = (from c in customers |
在本例中,查询现在返回在91822 ZIP Code区居住的客户人数。
通过该种方法,我们已经设法在结束时达到了开始时的目标(我对这一点始终觉得非常满意)。下一版本的C#的语法历经数年时间的发展,尝试了许多新的语言功能,才最终到达近乎于2004年冬提议的原始语法的境界。查询表达式的加入以C#即将发布的版本的其他语言功能为基础,并促使许多查询情况更便于具有SQL背景的开发人员阅读和理解。
【相关文章】
| 共4页: 上一页 [1] [2] [3] 4 | ||
|
|
||||
| · NAC安全访问控制 · 网络布线测试仪器 · Windows Server 2008专.. · Windows远程桌面应用 · 网络故障排除宝典 · 运营商封堵ADSL共享 中.. · 解析35岁技术人的价值.. · 世纪枭雄比尔盖茨的王.. |
· 主流品牌防火墙配置 · ASP.NET开发教程 · 超级计算机TOP500专题 · Vista SP1对决XP SP3 · SQL Server 2008/2005.. · 程序员如何成长? · C#技术开发指南 · 虚拟化技术还有点“虚” |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Windows远程桌面应用 · C#技术开发指南 · Apache技术专题 |
· Windows集群服务应用 · C#技术开发指南 · 国际文档格式标准开战 · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 |
|||