`
wantsong
  • 浏览: 37189 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

学习C# 3.0新语言特性

阅读更多

自动属性(Automatic Properties) <o:p></o:p>

<o:p></o:p>

定义Entity现在可以像接口的属性一样:<o:p></o:p>

    public class People<o:p></o:p>

    {<o:p></o:p>

        public string Code<o:p></o:p>

        {<o:p></o:p>

            get;<o:p></o:p>

            set;<o:p></o:p>

        }        <o:p></o:p>

<o:p> </o:p>

        public string Name<o:p></o:p>

        {<o:p></o:p>

            get;<o:p></o:p>

            set;<o:p></o:p>

        }<o:p></o:p>

    }<o:p></o:p>

将在编译时自动生成私有变量。<o:p></o:p>

对象初始化器(Object Initializers)<o:p></o:p>

可以这样来生成Entity实例:<o:p></o:p>

    People p = new People { Code = "110", Name = "WantSong" };<o:p></o:p>

 

 

集合初始化器(Collection Initializers) 

可以这样来生成集合<o:p></o:p>

    List<People> lst = new List<People>{<o:p></o:p>

            new People{Code = "110", Name = "Booch"},<o:p></o:p>

            new People{Code = "111", Name = "Scoot"},<o:p></o:p>

            new People{Code = "112", Name = "Tom"},<o:p></o:p>

            };

<o:p> </o:p>

Scott Guthrie说这样可以省很多字。<o:p></o:p>

<o:p>扩展方法 (Extension Methods)</o:p>

定义一个校验姓名的类。

namespace MyLinqStudy.Extension<o:p></o:p>

{<o:p></o:p>

    public static class NameValidation<o:p></o:p>

    {        <o:p></o:p>

        public static bool IsValidName(this string s)<o:p></o:p>

        {            <o:p></o:p>

            Regex regex = new Regex(@"[\u4e00-\u9fa5]{2,5}|(^[a-zA-Z]+[\s.]?([a-zA-Z]+[\s.]?){0,4}[a-zA-Z]$)");<o:p></o:p>

            return regex.IsMatch(s);<o:p></o:p>

        }<o:p></o:p>

    }<o:p></o:p>

}

<o:p> </o:p>

Using了该Space后,string 的方法被扩展了:

 

 

 

 

扩展的关键是IsValidName方法中有一个关键字“this”,告诉编译器将该方法扩展到String类中。<o:p></o:p>

打开Enumerable,可以看到很多这样的Extension

<o:p> </o:p>

也照着写一个While

namespace MyLinqStudy.Extension<o:p></o:p>

{<o:p></o:p>

    public static class WhileExtension<o:p></o:p>

    {<o:p></o:p>

        public static IEnumerable<TSource> While<TSource>(this IEnumerable<TSource> source, <o:p></o:p>

            Func<TSource, bool> predicate)<o:p></o:p>

        {<o:p></o:p>

            foreach(TSource item in source)<o:p></o:p>

            {<o:p></o:p>

                if (predicate(item))<o:p></o:p>

                {<o:p></o:p>

                    yield return item;<o:p></o:p>

                }<o:p></o:p>

            }            <o:p></o:p>

        }<o:p></o:p>

    }<o:p></o:p>

}<o:p></o:p>

跑一下看看:<o:p></o:p>

    int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };<o:p></o:p>

    IEnumerable<int> numQuery = numbers.While(num => num < 3);<o:p></o:p>

    foreach (int j in numQuery)<o:p></o:p>

    {<o:p></o:p>

          Console.Write("{0,1} ", j);<o:p></o:p>

    }<o:p></o:p>

num => num < 3 是什么东东? 看下一节Lambda表达式。<o:p></o:p>

<o:p> </o:p>

Lambda表达式

num => num < 3 是一个Lambda表达式,表示取小于3的数据。上节中的numQuery2.0中我们这样写:<o:p></o:p>

    IEnumerable<int> numQuery = numbers.While(<o:p></o:p>

                delegate(int i)<o:p></o:p>

                {<o:p></o:p>

                    return i < 3 ? true : false;<o:p></o:p>

                }<o:p></o:p>

             );<o:p></o:p>

Lambda表达式格式为:<o:p></o:p>

(参数列表) => 表达式或者语句块<o:p></o:p>

参数列表可以有多个,多个时用()括起来;参数类型可以是显式也可以是隐式;表达式、语句块就是执行操作的主体。<o:p></o:p>

试试下面这段代码<o:p></o:p>

    delegate bool CompareDelegate1();<o:p></o:p>

    delegate bool CompareDelegate2(int i,int j,int k);<o:p></o:p>

    class Program<o:p></o:p>

    {<o:p></o:p>

        static void Main(string[] args)<o:p></o:p>

        {<o:p></o:p>

            int compare = 11;<o:p></o:p>

            CompareDelegate1 mydel1 = () => {compare = 0; return compare > 10; };<o:p></o:p>

            Console.WriteLine("compare = {0};result={1}", compare,mydel1());<o:p></o:p>

<o:p> </o:p>

            CompareDelegate2 mydel2 = (x, y, z) => { return x == y && y== z; };<o:p></o:p>

            Console.WriteLine("x= {0},y= {1},z= {2}; result = {3}", 8,8,8, mydel2(8,8,8));

        }

    }<o:p></o:p>

注意:

·         A variable that is captured will not be garbage-collected until the delegate that references it goes out of scope.<o:p></o:p>

·         Variables introduced within a lambda expression are not visible in the outer method.<o:p></o:p>

·         A lambda expression cannot directly capture a ref or out parameter from an enclosing method.<o:p></o:p>

·         A return statement in a lambda expression does not cause the enclosing method to return.<o:p></o:p>

·         A lambda expression cannot contain a goto statement, break statement, or continue statement whose target is outside the body or in the body of a contained anonymous function.<o:p></o:p>

<o:p> </o:p>

分享到:
评论

相关推荐

    C# 3.0新语言特性和改进

    介绍C# 3.0新语言特性和改进内容,帮助开发人员更了解VS2008中的C#语言

    C#3.0语言特性

    文档全面介绍了C#3.0的语言特性。以及和2.0的不同和更新的结构 内容。和大家分享。

    C#3.0新特性 NET2.0基础上进行了改进

    C# 3.0新语言特性在.NET2.0基础上进行了改进,这些改进的功能可以大大简化我们编写程序。

    C# 3.0设计模式

    学习设计模式的好书。 本书为那些充满奥秘的设计模式提供了有效的C#3.0实现。” 如果想加速.NET应用程序的开发,你...本书条理清晰地介绍了经典的面向对象设计模式,并解释了怎样运用最新的C#3.0语言特性来编写它们。

    C# 3.0的新特性学习

    相信能给大家一个崭新的认识,深刻的学习c#语言。

    Linq学习手册与C#3.0特性

    先依次介绍一下C# 3.0新语言特性和改进,然后从一条一条LINQ语句分析来贯穿LINQ的知识点。最后通过一个实例程序实战Linq to sql带来全新的编程体验。

    Linq简介,C#使用方法

    总体来说,Visual Studio 2008和.NET 3.5是建立在.NET2.0核心的基础之上,.NET2.0核心本身将不再变化(如果不了解.NET2.0的朋友,请参看MSDN或者一些经典的书籍),C# 3.0新语言特性在.NET2.0基础上进行了改进,这些...

    C#3.0语言新特性(语言规范)

    C#3.0(C#Orcas——魔鬼)在C#2.0的基础上引入了很多语言扩展,用以支持高级别的函数式风格类库的创建和使用。这些扩展使得结构性API构造具有与其他领域(如关系数据库和XML)中查询语言同等的表达能力。这些扩展...

    C#+3.0设计模式

    本书条理清晰地介绍了经典的面向对象设计模式,并解释了怎样运用最新的C#3.0语言特性来编写它们。 C#设计模式利用新的C#3.0语言和.NET 3.5框架中的特性来实现开发社区中广为人知的23种设计模式。本书包含了揭示...

    More Effective c# 清晰版

    书中的 50个条目自成一体且又丝丝相扣,这些条目按照泛型、多线程开发、C#设计模式、C# 3.0语言增强、LINQ以及杂项等主题分为 6类,将特定的代码和深入的分析有机地结合了起来,能够帮助你以最佳的方式从 C# 1.x切换...

    新语言特性和改进 LINQ体验

    Visual Studio 2008基础上讲解Linq,讲述了Visual Studio 2008新特性,介绍了C# 3.0新语言特性和改进 开始讲解LINQ

    wpf源码大全 精通C#3.0图书源码 详细源码 学习好用

    示例描述:本章学习WPF中的内容控件的概念以及特性。 BorderDemo 使用Border控件。 ContentDemo Content属性的使用示例。 ControlControlDemo 内容控件层次结构。 HeaderedContentControlDemo ...

    C#3.0中Lambda表达式详解

    但是在C#3.0中,微软给我带来的一些新特性可能是以前所有开发语言都没有的特性。这无疑大大的体现了C#3.0在开发语言中强大的优势。 Lambda表达式 Lambda 表达式是一个匿名函数,它可以包含表达式和语句,并且可...

    《C#完全自学手册电子图书》第1章 Visual C#.NET 2008开发环境

    C# 3.0是非常重要的面向对象开发语言,并且已成为Java语言的重要对手。在.NET框架中,利用C# 3.0可以开发Windows应用程序和Web应用程序。C# 3.0的语法结构与C++很相似,有C语言基础的开发者非常容易上手。

    C# 4.0语言规范

    相对于C#3.0 语言规范 。为了确保 C# 程序和库能够以兼容的方式逐步演进,C# 的设计中充分强调了版本控制 (versioning)。许多编程语言不太重视这一点,导致采用那些语言编写的程序常常因为其所依赖的库的更新而无法...

    vs2008新特性 C#4.0

    C#3.0加入了堆语法糖并在没有修改CLR情况下引入了Linq简直是神来的笔虽然很多 项目出于各种各样如性能的类原因没有采用但非常适合小型快速开发减轻了员工作量也提高了代码可读性 ;C#4.0增加了动态语言特性从里面...

    c#.net程序设计教程(江红)

    本书基于visual studio 2008/.net framework 3.5开发和运行环境,阐述c#3.0语言的基础知识,以及使用c#3.0语言的实际开发应用实例。具体内容包括c#.net语言基础、面向对象编程、结构、枚举、泛型、特性、语言集成...

    C# 2005 NET3.0 (第5版)

    第5版在详尽论述C# 2005的基础上,又增加了.NET 3.0 Framework的新特性,更加完善了C#的技术。是缺乏C#或.NET编程经验,但有其他语言编程经验的开发人员,以及了解.NET 2.0,而且对.NET 3.0和Visual Studio 2005有...

Global site tag (gtag.js) - Google Analytics