1. 概述

  本章内容包括 C#5中如何更好的创建类型以及如何扩展现有类型。

2. 主要内容

  2.1 如何选择类型

    C#类型系统包括三种类型:值类型引用类型指针类型。(指针类型用于非托管代码,很少使用。)

    ① 创建枚举类型(enums)

      合理使用枚举类型 可以提高代码的可读性和可维护性。

    ② 值类型 还是 引用类型

      使用值类型的三个推荐的原则:

      a. 对象的体积小.  b. 对象逻辑上不可变.  c. 使用中会生成很多对象.

      * 结构类型(struct) 不能自己定义空构造器,不适用继承系统。

  2.2  完善类型体

    ① C# 命名参数、可选参数 和 方法重载

      命名参数用于给制定的参数传值,可选参数用于给指定的参数设置默认值。

void MyMethod(int firstArg, string secondArg = "default value",  bool thirdArg = false) { }

void CallingMethod()
{
MyMethod(, thirdArg: true);
}

    ② 使用索引器,可以实现以集合的方式访问对象成员。

class Cards {}

public Card this[int index]
{
get { return Cards.ElementAt(index); }
}

    ③ 使用 蓝图(blueprint)

      定义构造函数的几个原则:

      a. 如果需要的话,显示指定public访问控制符。

      b. 参数尽可能少。

      c. 将参数映射到字段(field)。

      d. 在合适的地方抛出异常。

      e. 构造函数中不要调用虚方法。

  2.3 如何设计类型

    ① 核心思想:高内聚,低耦合。

    ② SOLID设计原则:Single responsibility(S), Open/close(O), Liskov substitution(L), Interface segregation(I),

      Dependency Inversion(D).

    ③ 使用泛型类型(generic types)

      使用where关键字限制泛型可用范围,可以限制的类型包括:struct, class, new() 以及具体的类型及接口。

      使用default可以指定默认值。default(T)

  2.4 扩展现有类型

    C#提供了几种方法来扩展现有类型。本节介绍两个: 扩展方法 和 方法重写(overriding).

    ① 扩展方法 是在C#4.0引入的,需要定义在 非泛型、非嵌套、静态类中。

pubic class Product
{
public decimal Price { get; set; }
} public static class MyExtensions
{
public static decimal DisCount(this Product product)
{
return product.Price * .9M;
}
} public class Calculator
{
public Decimal CalculateDisCount(Product p)
{
return p.DisCount();
}
}

      *扩展方法不仅可用在类、结构上,还可以用在接口上。LINQ是用在接口上的一个例子。

    ② 重写虚方法 也可以实现对现有代码的扩展。

class Base
{
public virtual int MyMethod()
{
return ;
}
} class Derived : Base
{
public override int MyMethod()
{
return base.MyMethod() * ;
}
}

3. 总结

  ① 一个类型中可以包括:构造器、方法、属性、字段 和 索引器。

  ② 创建和调用方法时,可以使用 可选参数 和 命名参数。

  ③ 可以用扩展方法向现有类型增加功能。

  ④ 使用方法重写,可以在子类中重定义父类的相应功能。

第六章 管理类型(In .net4.5) 之 创建类型的更多相关文章

  1. 第七章 管理类型(In .net4.5) 之 使用类型

    1. 概述 本章介绍 值类型的装箱拆箱.类型转换 以及 C#4.0新推出的 dynamic 关键字. 2. 主要内容 2.1 装箱和拆箱 2.2 类型转换 有四种方式可以实现类型转换: ① 隐式转换: ...

  2. C# Language Specification 5.0 (翻译)第六章 转换

    转换使表达式可以当做一个明确的类型来加以处理.转换使得所给定类型的表达式以不同类型来处理,或使得没有某个类型的表达式获得该类型.转换可以是显式或隐式的,而这决定了是否需要显式地强制转换.比方说,从类型 ...

  3. 《C++Primer》第五版习题答案--第六章【学习笔记】

    <C++Primer>第五版习题答案--第六章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/16 第六章:函数 ...

  4. 第九章 管理类型(In .net4.5) 之 继承机制

    1. 概述 本章包括 设计和实现接口.创建和使用基类 以及 使用.net类库提供的标准接口. 2. 主要内容 2.1 设计和实现接口 一个接口包含公共的方法.属性.事件.索引器.类和结构都可以实现接口 ...

  5. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片——多对多关系(上篇)

    在这章中,我们将学习如何创建一个管理图片的新实体,如何使用HTML表单上传图片文件,并使用多对多关系将它们和产品关联起来,如何将图片存储在文件系统中.在这章中,我们还会学习更加复杂的异常处理,如何向模 ...

  6. RHCE学习笔记 管理1 (第六章 第七章)

    第六章 利用linux 文件系统权限文件访问 1.linux文件系统权限 文件的权限分为:  rwx  读/写/执行 ls -l  /home   查看/home下文件 ls -ld /home   ...

  7. 鸟哥的linux私房菜——第十六章学习(程序管理与 SELinux 初探)

    第十六章.程序管理与 SE Linux 初探 在 Linux 系统当中:"触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的 ...

  8. 鸟哥的linux私房菜——第六章学习(Linux文件与目录管理)

    ******************第六章学习****************** 1.[文件与目录管理] 在所有目录下面都会存在的两个目录,分别是 "." 与 "..& ...

  9. 第十六章 调试及安全性(In .net4.5) 之 调试程序

    1. 概述 本章内容包括 如何选择合适的构建类型.创建和管理编译指令.管理程序数据文件(pdb)和指令. 2. 主要内容 2.1 构建类型 .net中默认的两种生成模式是 发布(Release)模式 ...

随机推荐

  1. Android系统下检测Wifi连接互联网是否正常的代码

    /**  *  * 判断网络状态是否可用  *  * @return true: 网络可用 ; false: 网络不可用  */    public boolean isConnectInternet ...

  2. Laxcus大数据管理系统2.0(10)- 第八章 安全

    第八章 安全 由于安全问题对大数据系统乃至当前社会的重要性,我们在Laxcus 2.0版本实现了全体系的安全管理策略.同时我们也考虑到系统的不同环节对安全管理的需求是不一样的,所以有选择地做了不同的安 ...

  3. memcached 学习(一)

    memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件.现在已成为 mixi. hatena. Faceboo ...

  4. iOS 根据字符串来定位地址

    - (void)viewDidLoad { [super viewDidLoad]; self.geocoder = [[CLGeocoder alloc]init]; // 设置地图可缩放 self ...

  5. NHibernate输出SQL语句

    用了NHierbate之后,很少需要写原生的SQL语句,由于总是看不到SQL语句,所以有时候对SQL调优非常不利.因此产生了让NHibernate输出它所生成的SQL语句的想法,以便于后续调优. 一. ...

  6. 父窗口调用iframe子窗口方法

    一.父窗口调用iframe子窗口方法 1.HTML语法:<iframe name="myFrame" src="child.html"></i ...

  7. 【IHttpHandler】HttpModule,HttpHandler,HttpHandlerFactory简单使用

    这三个对象我们在开发Asp.net程序时经常会用到,似乎很熟悉,但有时候又不太确定.本文通过一个简单的例子来直观的比较一下这三个对象的使用. HttpModule:Http模块,可以在页面处理前后.应 ...

  8. WP_图片管理机制/异步读取网络图片

    项目有这样的需求, 要求窗口加载一揽子图片,为了不让UI阻塞太久,采用异步读取后绑定显示的方案. 图片的下载应该采用并发的过程(等待网络响应会很耗时,一张一张的下载,等待时间太长) 图片的下载不能占用 ...

  9. java实验报告三 敏捷开发与XP

    20145306 java 实验三 实验报告 实验内容 1.git下载结对同学的代码 2.修改结对同学的代码 3.实现代码重构 实验步骤 新建存储空间 git下载代码 将修改后的代码上传 上传结果 重 ...

  10. 查找Safari相关迹证

    日前有取证的同好提及Safari,想了解详细步骤,因而在此再补充说明相关. 除了Winodws外,Mac OS X也有为数不少的使用者,以下便以OS X自带的Safari浏览器为例,来查看有哪些重要迹 ...