这里只提供各个特性的简单概括。

    C# 的完整指南可参阅《Introducing Visual C#》、深度了解 LINQ 可参考《Pro LINQ in C#

4.1 准备示例项目

    为了演示语言特性,笔者用 “ASP.NET MVC 4 Application” 模板创建了一个新的 Visual Studio 项目。(名称为 LanguageFeatures,选择 “空模板” 作为初始内容,并对 “添加文件夹和核心引用” 选中了 “MVC” 选项)

    (本章需要一个简单的控制器来演示这些语言特性,所以在 “Controllers” 文件夹中创建 HomeControllers.cs 文件 —— 右击 Controllers 文件夹,选择 “添加”、“控制器”,然后从 “选择支架” 菜单中选择 “空的 MVC 5 控制器”,单击 “添加” 按钮,将名称设置为 “HomeController”,单击 “添加” 按钮。最后,编辑其内容)

  添加 System.Net.Http 程序集

    本章后面部分()将使用一个依赖于 System.Net.Http 程序集的示例(该程序集默认情况下不会添加到 MVC 项目中)—— 打开 “引用管理器” 窗口,在窗口左侧选择 “程序集”,并勾选 “System.Net.Http”选项。

特性一、使用自动实现的属性

    使用属性要比使用字段更好,因为你可以修改 get 块和 set 块中的语句,而不需要修改依赖于这个属性的类。

    属性固然号,但是当一个类有很多属性时,事情就变得有点乏味了 —— 所有属性都要对字段协调访问 —— 产生了一个不必要的冗长的类文件。

    属性要具有灵活性 —— 没有重复的 getter 和 setter,解决办法是使用一种自动实现的属性(也成为 “自动属性”)

    利用自动属性,可以采用字段支持式属性模式,而不需要定义这个字段或在 getter 和 setter 中指定代码,如下所示:

        public int ID { get; set;}

        public int Name { get; set;}

        public int Price { get; set;}

    注意,这里并未定义 getter 和 setter的体,也未定义该属性返回的字段。—— 这两者都由 C# 编译器在这个类被编译时自动完成。使用自动属性与使用规则属性没什么不同。

    通过使用自动属性可以减少一些输入,形成更易于阅读的代码。(并保持了属性的灵活性)

    如果需要改变一个属性的实现方式,还可以返回到规则属性的格式。(必须同时实现 getter 和 setter,以回到规则属性的定义方式。另外还有一点要注意 —— 必须补上属性所对应的字段的定义)

    C# 在一个属性中不支持混用自动和规则风格的 getter 和 setter 。

特性二、使用对象与集合的初始化器

    另一个烦人的编程任务是构造一个新的对象,然后给属性赋值。例如:

        Product myProduct = new Product();    //创建一个新的 Product 对象

        //设置属性值

        myProduct.ID = 100;

        myProduct.Name = "口香糖";

        myProduct.Description = "请不要吞咽";

        myProduct.Price = "2M";

        myProduct.Category = "零食";

    在这个示例中必须要通过 2 个步骤才能创建 Product 对象:创建对象、设置参数值。—— 而使用对象初始化器特性可以在一个步骤中创建并填写 Product 实例,如下所示:

        Product myProduct = new Product {

        ID = 100,

        Name = "口香糖",

        Description = "请不要吞咽", Price = "2M", Category = "零食"

        }

    Product 名称之后所调用的花括号形成了初始化器,目的是为参数提供值,以此作为该对象的构造过程。

    以这种同样的特性作为构造过程,也能对集合和数组的内容进行初始化。

        string[ ]  stringArray = { "apple", "orange", "plum" };

        List<int> intList = new List<int> { 10, 20, 30, 40 };

        Dictionary<string, int> myDic = new Dictionary<string, int> { { "apple",10 }, { "orange", 20 } };

    这种特性是一种语法的便利,它只是使 C# 用起来更舒适,并没有任何其他影响或好处。

特性三、使用扩展方法

    扩展方法是指给那些不是你拥有的、不能直接修改的类添加方法的一种方便的办法。

    在 Models 文件夹中创建 MyExtensionMethods.cs 类文件

        public static class MyExtensionMethods
        {
          public static decimal TotalPrices(this ShoppingCart cartParam)
          {
            decimal total = 0;
            foreach (Product prod in cartParam.Products)
            {
              total += prod.Price;
            }
          return total;
          }
        }

    第一个参数前的 this 关键字把 TotalPrices 标记为是一个扩展方法。

    第一个参数告诉 .NET,这个扩展方法运用于哪个类 —— 此例为 ShoppingCart 类。(可以通过使用 cartParam 参数类引用 ShoppingCart 类的实例,ShoppingCart 类是这个扩展方法所运用的类)

    通过使用扩展方法可以可以扩展类的功能,但只能使用有权限访问的类成员。(方法、字段、属性等)

    TotalPrices 虽然是由一个完全不同的类所定义的扩展方法,但依然可以像其他方法一样在 ShoppingCart 对象上调用,就好像它是 ShoppingCart 类的一部分。(如果你的扩展类和当前类位于同一命名空间中,或是在 using 语句子项的命名空间中,.NET便会找到它们)

  4.4.1 对接口运用扩展方法

    也可以创建运用于一个接口的扩展方法,并允许在实现这个接口的所有类上调用这个扩展方法。

    ……(这一部分先跳过吧)

[ 未完待续……]

第 4 章—— C# 语言特性(《精通 ASP.NET MVC 5》)的更多相关文章

  1. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(1)搭建MVC环境 注册区域 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(2)创建 ...

  2. 精通ASP.Net MVC 3 框架(第三版)学习笔记

    精通ASP.Net MVC 3 框架(第三版)学习笔记 代码才是王道. http://pan.baidu.com/s/1pJyL1cn

  3. 3.4 自动测试初步《精通ASP.NET MVC 5》

    概述 ASP.NET MVC 框架已被设计成易于建立自动测试,并易于采用诸如测试驱动开发(TDD)等的开发方法学.ASP.NET MVC 为自动化测试提供了一个理想平台. 从广义上讲,当今的 Web ...

  4. 3.3 建立松耦合组件(MVC 模式最重要的特性之一是它支持、关注“分离”)《精通 ASP.NET MVC 5》 推荐指数:8 星半

    笔者通常希望应用程序中的组件尽可能独立,而只有很少几个可控的依赖项.—— 在理想情况下,每个组件都不了解其他组件,而只是通过抽象接口来处理应用程序的其他区域.这称为松耦合 .—— 它能够使应用程序更易 ...

  5. 【开源分享:入门到精通ASP.NET MVC+EF6+Bootstrap】从这里开始,一起搭框架(1)开篇介绍

    框架简介 这几年一直在做ASP.NET开发,几年前做项目都是老老实实一行行的写代码,后来发现那些高手基本都会有自己积累起来的代码库,现在称之为开发框架,基础代码不用再去堆,主要精力可以集中在业务逻辑实 ...

  6. 精通 ASP.NET MVC 4 学习笔记(一)

    这里记录着从 P132 到 P192 的内容.水分很足,大部分是书上的代码,我只加了一些基于我自己的理解的能帮助初学者看懂的注释,并且把书中的部分内容做了一些的拓展. 建立数据层 设置 DI 容器 / ...

  7. 使用整体模型模板辅助器 Using Whole-Model Templated Helpers 模板辅助器方法 精通ASP.NET MVC 5

    怎么会

  8. Creating Form Elements --Using BeginForm and EndForm 使用内建的Form辅助器方法 精通ASP.NET MVC 5

    Using the BeginForm and EndForm Helper Methods in the CreatePerson.cshtml File

  9. Creating Custom Helper Methods 创建自定义辅助器方法----辅助器方法 ------ 精通ASP.NET MVC 5

    创建内联的辅助器方法 和 拓展方法 好像类似的功能. 不过写在前台更直观

随机推荐

  1. UVA10298 Power Strings

    UVA10298 Power Strings hash+乘法逆元+一点点数学知识 我们用取余法算出主串的hash,然后从小到大枚举子串的长度 显然,如果若干个子串的复制的hash值之和等于主串的has ...

  2. P4289 [HAOI2008]移动玩具(bfs)

    P4289 [HAOI2008]移动玩具 双向bfs+状态压缩+记忆化搜索 双向bfs用于对bfs的优化,每次找到可扩展节点少的一边进行一次bfs,找到的第一个互相接触的点即为最短路径 矩阵范围仅4* ...

  3. 20165310java_blog_week6

    2165310 <Java程序设计>第6周学习总结 教材学习内容总结 String 构造 String str=new String() String (char a[]) String ...

  4. NOIP 华容道

    描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. 小 B 玩的华容道与经典的 ...

  5. noip2010 真题练习 2017.2.18

    第一题比较简单,用exist数组判断是否在循环队列中,就可实现线性算法. Code #include<iostream> #include<cstdio> #include&l ...

  6. C++ compile Microsoft Visual C++ Static and Dynamic Libraries

    出处:http://www.codeproject.com/Articles/85391/Microsoft-Visual-C-Static-and-Dynamic-Libraries 出处:http ...

  7. Delphi XE5 for Android (一)

    Delphi XE5 出来了,支持Android的开发,试用了一下,有几个问题: 1.只支持ARM7的设备,不支持Inter设备.手上刚好有一个华硕K004,很遗憾用不上,只能用手机试了. 2.要支持 ...

  8. JavaScript常用操作,常用类

    算术运算符 重点关注 算数,赋值,逻辑运算符,三目运算符 <!DOCTYPE html> <html> <head> <meta charset=" ...

  9. 逃离迷宫(BFS)题解

    Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有 ...

  10. [loss]Triphard loss优雅的写法

    之前一直自己手写各种triphard,triplet损失函数, 写的比较暴力,然后今天一个学长给我在github上看了一个别人的triphard的写法,一开始没看懂,用的pytorch函数没怎么见过, ...