zoukankan      html  css  js  c++  java
  • vs2008学习之路

    [1]新的C#语言特性:自动属性(Automatic Properties)
    public class Person {
            public string FirstName {
                get; set;
            }
            public string LastName {
                get; set;
            }   
            public int Age {
                get; set;
            }
        }
    可以通过上面的代码来代替之前的:
    public class Person {

            private string _firstName;
            private string _lastName;
            private int _age;
           
            public string FirstName {

                get {
                    return _firstName;
                }
                set {
                    _firstName = value;
                }
            }

            public string LastName {

                get {
                    return _lastName;
                }
                set {
                    _lastName = value;
                }
            }       
           
            public int Age {

                get {
                    return _age;
                }
                set {
                    _age = value;
                }
            }
        }

    新C#编译器通过一个叫“自动属性(automatic properties)”的

    语言特性提供了一个优雅的方式来使得你的编码更加简洁,同时

    还保持属性的灵活性。自动属性允许你避免手工声明一个私有成

    员变量以及编写get/set逻辑,取而代之的是,编译器会自动为

    你生成一个私有变量和默认的get/set 操作。
    譬如,使用自动属性


    public class Person {
            public string FirstName { get; set; }
            public string LastName { get;set; }  
            public int    Age       { get; set; }
        }
    [2]C#语言的新特性:对象初始化器(Object Initializers)
    以前申请对象,初始化对象需要这样:
    Person person = new Person();
       person.FirstName = "Scott";
       person.LastName = "Guthrie";
       person.Age = 32;

    而今只需要:
    Person person = new Person { FirstName="Scott",

    LastName="Guthrie", Age=32 };

    同时不需要类提供带参数的构造函数.
    再如类对象嵌套初始化:
    Person person = new Person {
          FirstName = "Scott",
          LastName = "Guthrie"
          Age = 32,
          Address = new Address {
             Street = "One Microsoft Way",
             City = "Redmond",
             State = "WA",
             Zip = 98052
          }
       };

    [3]C#语言的新特性:集合初始化器(Collection Initializers)
    对象初始化器很棒,它极大地简化了把对象添加到集合的做法。

    譬如:
    List<Person> people = new List<Person>();
               
    people.Add( new Person { FirstName = "Scott", LastName

    = "Guthrie", Age = 32 } );
    people.Add( new Person { FirstName = "Bill", LastName

    = "Gates", Age = 50 } );
    people.Add( new Person { FirstName = "Susanne",

    LastName = "Guthrie", Age = 32 } );

    [4]新C#语言特性:匿名类型
    [5]利用var关键词,这个新关键词在声明局部变量时可用于替代

    类型名。
    除了使用var这个关键词替代内置的数据类型外,很明显地,你

    也可以将它用于你定义的任何自定义类型。

    [6]新C#语言特性:扩展方法
    比如:
    string email = Request.QueryString["email"];
    if ( EmailValidator.IsValid(email) ) {
       DO();
    }

    而使用C#中的新“扩展方法”语言特性的话,则可以添加一个有

    用的“IsValidEmailAddress()”方法到string类本身中去,该

    方法返回当前字符串实例是否是个合法的字符串。然后我可以把

    我的代码重写一下,使之更加干净,而且更具描述性,象这样:


    string email = Request.QueryString["email"];
    if ( email.IsValidEmailAddress() ) {
       DO();
    }
    我们是怎么把这个新的IsValidEmailAddress()方法添加到现有

    的string类里去的呢?我们是通过定义一个静态的类型,带有我

    们的“IsValidEmailAddress”这个静态的方法来实现的,象下

    面这样:


    public static class ScottGuExtensions
    {
        public static bool IsValidEmailAddress(this string

    s)
        {
            Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+

    [\w-]{2,4}$");
            return regex.IsMatch(s);
        }
    }
    上面的静态方法在第一个类型是string的参数变量前有个“this

    ”关键词,这告诉编译器,这个特定的扩展方法应该添加到类型

    为“string”的对象中去。然后在IsValidEmailAddress()方法

    实现里,我可以访问调用该方法的实际string实例的所有公开属

    性/方法/事件,取决于它是否是合法电子邮件地址来返回

    true/false。
    在我的代码里把这个特定的扩展方法的实现添加到string实例,

    我只要使用标准的“using”语句来引入含有该扩展方法的实现

    的命名空间:
    using ScottGuExtensions;


    利用扩展方法这个新特性来给个别类型添加方法给开发人员开辟

    了许多有用的扩展性使用场景。但使得扩展方法非常强有力的是

    ,它们不仅能够应用到个别类型上,也能应用到.NET框架中任何

    基类或接口上。这允许开发人员建立种种可用于整个.NET框架的

    丰富的可组合的框架层扩展。

    using System;
    using System.Collection;

    namespace YourNamespace{
       public static class TestClass{
          public static bool In(this object o,IEnumerable

    c){
              foreach(object i in c){
                 if(i.Equals(o))
                      return true;
              }
              return false;
           }
        }
    }

    注意上面我是如何声明扩展方法的第一个参数的:“this

    object o”。这表明,这个扩展方法应该适用于继承于基类

    System.Object的所有类型,这意味著我可以在.NET中的每个对

    象上使用它。

    上面这个“In”方法的实现允许我检查一个指定的对象是否包含

    在作为方法参数传入的一个IEnumerable序列中。因为所有

    的.NET集合和数组都实现了IEnumerable接口,现在我拥有了一

    个有用的,描述性强的方法来检查一个任意的对象是否属于任何

    .NET集合或数组。

    在给类库中添加方法时,需要另外新建一个类用来建立方法.
    方法中第一个参数为该方法的对象.第二参数以后的为方法自带

    参数.

    [7]在以往的CODING中,当使用自能提示时,发现此时也需要查看

    该行代码的下面代码.而自能提示的不透明性给编码带来了麻烦.

    如今VS2005中,当你在使用自能提示时,如果需要查看下面代码,

    只需要按住CTRL键就可以使自能提示框透明50%.就可以清楚看到

    下面是什么样的代码,以此来选择你所需要的方法或属性.

  • 相关阅读:
    div常用设置
    Chrome-Charset——Chrome最新版右键工具中的编码修改功能没有了的解决工具
    PHP数据访问(面向对象方式:mysqli类)
    JSON
    jQuery
    jQuery事件
    会话保持
    查询的例子,房屋租赁
    PHP CRUD
    批量删除
  • 原文地址:https://www.cnblogs.com/di305449473/p/1236116.html
Copyright © 2011-2022 走看看