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

    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. 20145317彭垚《网络对抗》Exp9 Web安全基础实践

    20145317彭垚<网络对抗>Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询 ...

  2. Android实践项目汇报(总结)

    天气客户端开发报告 1    系统需求分析 1.1功能性需求分析 天气预报客户端,最基本就是为用户提供准确的天气预报信息.天气查询结果有两种:一种是当天天气信息,信息结果比较详细,除温度.天气状况外还 ...

  3. PN结讲解

    可能大家在使用半导体器件的时候只是在使用它的电气属性,并没有很好的关心下它是什么原因才有了这样的电气属性,那么我们本篇就从物理结构分析下PN结吧. 首先看一张比较陈旧的图图: (就按自己的笔记简单谈谈 ...

  4. Python3基础 os listdir curdir 查看当前工作目录的所有文件的名字

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  5. P4879 ycz的妹子

    思路 让你干啥你就干啥呗 查询第x个妹子就get一下再修改 这里稳一点就维护了三个东西,也许两个也可以 代码 #include <iostream> #include <cstdio ...

  6. 【第二十章】 springboot + consul(1)

    consul的具体安装与操作查看博客的consul系列. 一.启动consul (1个server+1个client,方便起见,client使用本机):查看:http://www.cnblogs.co ...

  7. [BZOJ1044][HAOI2008]木棍分割 二分 + 单调队列优化dp + 滚动数组优化dp

    Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长 ...

  8. js中this关键字的使用

    <script> //题目一:理解r1与r2的输出 function addFactory(){ var adder = 5; return function(data){ adder + ...

  9. ElasticSearch 5.4 安装

        1. 前期准备  环境准备 IP地址 操作系统 内存 192.168.1.10 centos 7 16 192.168.1.11 centos 7 16 192.168.1.12 centos ...

  10. 使用Apache Kylin搭建企业级开源大数据分析平台

    转:http://www.thebigdata.cn/JieJueFangAn/30143.html 我先做一个简单介绍我叫史少锋,我曾经在IBM.eBay做过大数据.云架构的开发,现在是Kylige ...