• CSharpThinkingC#3 革新(附加二)


      本章主要讨论C#3较C#2的一些革新,其中大多数革新所体现的新特性是为Linq服务的,但本章不打算单独讨论,会在后面详细说明。

      一,自动实现的属性

        1.1 意义:是开发者不必再写出由字段直接提供的简单属性。

        1.2 优缺点:使用自动属性可以简洁那些不做内部校验的属性,C#编译器支持简洁的{get;set;}表达方式。不足之处是:不能方便的设置初始值。

    1 public string Name
    2 {
    3     get;
    4     private set;
    5 }

      二,隐式类型的局部变量

        2.1 意义:根据初始值判断变量的类型,从而简化局部变量的声明。重点在于隐式类型并没有使C#称为动态或者弱类型的语言。

            var在使用时完全是编译器在编译前已“明确的”,“唯一的”生成相应的类型变量,而不是可变的。

        2.2 隐式类型的限制:

            1) 被声明的变量时一个局部变量。

            2) 变量在声明的同时被初始化。

            3) 初始化表达式不是一个方法组,也不是一个匿名函数。

            4) 初始化表达式不是Null。

            5) 语言中值声明了一个变量。

            6) 你希望变量拥有的类型是初始化表达式的编译时的类型。

            7) 初始化表达式不包含正在声明的变量。

        2.3 优缺点:

            优点---减少屏幕上的代码量及改变了代码重心(更多的关注右侧类型)。

            缺点---可读性变差。

      三,对象和集合初始化程序

        3.1 意义:用简单的表达式来初始化对象。

        3.2 支持集合初始化及嵌套类型的集合初始化,如内部嵌套类型不在另外使用的话(不关注初始化的数据另外使用),则此初始化更清晰的表达了数据及初始化过程。

     1 Person tom = new Person
     2 {
     3     Name = "Tom",
     4     Home = { Town = "Reading",Country = "UK" }, // 初始化嵌入对象
     5     Friends =                                                        // 更进一步的对象初始化器
     6     {
     7             new Person{ Name = "Alberto"},
     8             new Person{ "Max"},
     9             new Person("Alice")
    10             {
    11                     Home = { Town = "Twyford", Country = "UK"},
    12             }
    13      }
    14 }
    15 ...
    16 
    17 public class Person
    18 {
    19     public string Name{get;set;}
    20     private Loaction _Home = new Location();
    21     public Location Home{get {return _Home;}}
    22     private List<Person> _Friends = new List<Person>();
    23     public List<Person> Friends { get { return _Friends;}}
    24     
    25     public Person(string n)
    26     {
    27         Name = n;
    28     }
    29 }
    30 ...
    31 public class Loaction
    32 {
    33     public string Country{get;set;}
    34     public string Town{get;set;}
    35 }

      四,隐式类型的数组

        5.1 意义:代码简洁,前提是编译器得知道要初始化什么样的数组。

    1 public void MyMethod(string[] name)
    2 {
    3     ...
    4 }
    5 ...
    6 MyMethod({"Lily","Holly","Tom"}); // 错误:编译器不知道什么类型
    7 MyMethod(new string[] {"Lily","Holly","Tom"}); // 正确:编译器确切的知道类型
    8 MyMethod(new[] {"Lily","Holly","Tom"}); // 正确:编译器能清楚的推断出类型,大多数时候参数类型要相同,否则要进行强制转换。
  • 相关阅读:
    浙江省CIO协会钱塘江论坛近日在网易云创沙龙宣布成立
    用Python解析XMind
    Flask写web时cookie的处理
    一篇文章看懂Facebook和新浪微博的智能FEED
    改进网易云音乐的“音乐社交”构想
    移动端爬虫工具与方法介绍
    用供应链管理思路降低教培产品成本
    【网易严选】iOS持续集成打包(Jenkins+fastlane+nginx)
    网易严选的wkwebview测试之路
    linux多进程之间的文件锁
  • 原文地址:https://www.cnblogs.com/cuiyansong/p/3108438.html
Copyright © 2020-2023  润新知