`
wantsong
  • 浏览: 38084 次
  • 性别: 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是.NET Framework 3.5的一部分,带来了许多新的语言特性和改进,旨在提高开发效率和代码简洁性。以下是对这些特性的详细解释: 1. **自动属性(Auto-Implemented Properties)** 自动属性是C# 3.0引入的一个...

    C# 3.0 语言定义文档

    通过阅读微软的C# 3.0语言定义文档,开发者可以深入理解这些特性的具体实现和使用方法,从而更好地利用C#进行软件开发。这份文档详尽地解释了每一种新特性的语法、用法以及背后的设计理念,是学习和掌握C# 3.0不可或...

    C# 3.0:A Beginner’s Guide

    这本书覆盖了C# 3.0版本的所有新特性与基本概念,对于希望掌握这门现代化、面向对象的编程语言的读者来说,是一本不可多得的资源。 ### C# 3.0简介 C# 3.0是微软在.NET Framework 3.5中推出的重要更新,它引入了...

    C#3.0完全自学宝典(C#加入了许多新的特性)

    C# 3.0是微软在.NET Framework 3.5中推出的重要版本,它极大地扩展了C#语言的功能,引入了一系列创新的编程特性,旨在提高开发效率和代码可读性。以下将详细介绍C# 3.0的一些核心知识点: 1. **匿名方法与Lambda...

    c#3.0入门经典教程

    一、语言特性 1. 面向对象编程:C# 3.0支持类、接口、继承、多态等面向对象的基本概念,允许创建复杂的类层次结构,提供强大的抽象能力。 2. Lambda表达式:这是C# 3.0引入的一项重要特性,允许你简洁地定义匿名...

    C#3.0一些新语法

    本文将详细介绍 C# 3.0 中的一些关键新特性,并通过具体示例来解释这些特性的应用。 #### 自动实现的属性 (Auto-Implemented Properties) C# 3.0 引入了自动实现的属性这一概念,这使得定义只包含 getter 和 ...

    C# 3.0与.NET 3.5高级编程.rar

    在本书中,你将学习到如何利用C# 3.0的新特性进行面向对象编程,如泛型、委托、事件、属性和接口。此外,还将探索.NET 3.5框架下的高级主题,如并发控制、异常处理、反射、元数据以及与.NET Framework库的深度集成。...

    Programing C# 3.0(5th edition)

    总之,《Programming C# 3.0(5th Edition)》是学习C# 3.0编程的理想资源,它不仅介绍了语言的新特性,还提供了丰富的实践指导,帮助开发者充分利用C#的强大功能,提升开发效率和代码质量。书中的Programming.C....

    C#3.0语言特性

    C# 3.0是微软推出的面向对象编程语言的一个重要版本,它在C# 2.0的基础上进行了许多改进和新增了多个语言特性。本文档将深入探讨C# 3.0的关键特性,并与C# 2.0进行对比。 1. **泛型**:在C# 2.0中引入的泛型为代码...

    C#3.0完全自学宝典.rar

    总的来说,《C#3.0完全自学宝典》涵盖了C#3.0语言的核心要素,无论你是编程新手还是有一定经验的开发者,都能从中受益。通过系统的学习,你将能够熟练掌握C#3.0的使用,为进一步深入.NET开发打下坚实基础。这本书的...

    C#3.0 in a nutshell

    这本书是C#开发者的重要参考资料,涵盖了C# 3.0的新特性和核心概念,旨在帮助程序员理解和掌握这个强大的.NET框架语言。 C# 3.0在C# 2.0的基础上引入了许多创新性功能,其中最显著的是对面向服务编程的支持和语言...

    vs2008视频教程 2 C#3.0与VB9.0的新特性介绍

    【标题】:“vs2008视频教程 2 C#3.0与VB9.0的新特性介绍” 本视频教程聚焦于Visual Studio 2008中的编程语言C# 3.0和Visual Basic 9.0的最新特性。Visual Studio 2008作为微软开发工具的重要组成部分,它在提升...

    C# 3.0 语言规范

    总的来说,《C# 3.0 语言规范》详尽地解释了这些新特性的使用和背后的设计理念,对于深入理解C#语言以及提升编程技能具有重要意义。无论是初学者还是经验丰富的开发者,都应该熟悉并掌握这些规范,以便更好地利用C#...

    C#3.0新语法总结

    C# 3.0 是C#编程语言的一个重要版本,引入了多项新特性,极大地提升了开发效率和代码的可读性。以下是对这些特性的详细解释: 1. **自动属性(Auto-Implemented Properties)**: 自动属性允许开发者快速创建只包含...

    C# 3.0 入门系列

    C# 3.0 是微软.NET Framework 3.5的一部分,是C#语言的一个重要版本,引入了许多新特性,使得编程更加简洁、高效。在这个入门系列中,我们将深入探讨C# 3.0的关键概念,帮助初学者快速掌握这门强大的编程语言。 1. ...

    C# 3.0完全自学宝典 源文件

    《C# 3.0完全自学宝典》是一本针对C#编程语言的全面学习教程,特别适合初学者。C#是由微软公司推出的面向对象的编程语言,它在.NET框架下运行,广泛应用于Windows桌面应用、Web应用以及游戏开发等领域。这本书的...

    C# 3.0 官方语言规范 完整版 包含C#2.0及3.0扩展部分

    C# 3.0是微软开发的面向对象的编程语言的一个重要版本,它在C# 2.0的基础上增加了一些显著的新特性和扩展。官方语言规范详细定义了C# 3.0的所有语法、语义以及编程模型,是开发者理解和掌握C# 3.0的关键资源。 1. *...

    C# 3.0 锐利体验系列课程(1)

    总之,C# 3.0的这些新特性极大地扩展了语言的能力,使得C#成为了一个更强大、更灵活的开发工具。本系列课程将深入解析这些特性,帮助开发者更好地理解和运用C# 3.0,以提升开发效率和软件质量。

    C# 3.0的新特性学习

    C# 3.0是.NET Framework...总结,C# 3.0的新特性显著增强了语言的功能,提高了开发效率。从匿名类型到LINQ,从扩展方法到隐式类型,每项新特性都为C#开发者提供了更强大的工具,使其能够写出更简洁、更易于理解的代码。

Global site tag (gtag.js) - Google Analytics