第六章 管理类型(In .net4.5) 之 创建类型
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) 之 创建类型的更多相关文章
- 第七章 管理类型(In .net4.5) 之 使用类型
1. 概述 本章介绍 值类型的装箱拆箱.类型转换 以及 C#4.0新推出的 dynamic 关键字. 2. 主要内容 2.1 装箱和拆箱 2.2 类型转换 有四种方式可以实现类型转换: ① 隐式转换: ...
- C# Language Specification 5.0 (翻译)第六章 转换
转换使表达式可以当做一个明确的类型来加以处理.转换使得所给定类型的表达式以不同类型来处理,或使得没有某个类型的表达式获得该类型.转换可以是显式或隐式的,而这决定了是否需要显式地强制转换.比方说,从类型 ...
- 《C++Primer》第五版习题答案--第六章【学习笔记】
<C++Primer>第五版习题答案--第六章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/16 第六章:函数 ...
- 第九章 管理类型(In .net4.5) 之 继承机制
1. 概述 本章包括 设计和实现接口.创建和使用基类 以及 使用.net类库提供的标准接口. 2. 主要内容 2.1 设计和实现接口 一个接口包含公共的方法.属性.事件.索引器.类和结构都可以实现接口 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片——多对多关系(上篇)
在这章中,我们将学习如何创建一个管理图片的新实体,如何使用HTML表单上传图片文件,并使用多对多关系将它们和产品关联起来,如何将图片存储在文件系统中.在这章中,我们还会学习更加复杂的异常处理,如何向模 ...
- RHCE学习笔记 管理1 (第六章 第七章)
第六章 利用linux 文件系统权限文件访问 1.linux文件系统权限 文件的权限分为: rwx 读/写/执行 ls -l /home 查看/home下文件 ls -ld /home ...
- 鸟哥的linux私房菜——第十六章学习(程序管理与 SELinux 初探)
第十六章.程序管理与 SE Linux 初探 在 Linux 系统当中:"触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的 ...
- 鸟哥的linux私房菜——第六章学习(Linux文件与目录管理)
******************第六章学习****************** 1.[文件与目录管理] 在所有目录下面都会存在的两个目录,分别是 "." 与 "..& ...
- 第十六章 调试及安全性(In .net4.5) 之 调试程序
1. 概述 本章内容包括 如何选择合适的构建类型.创建和管理编译指令.管理程序数据文件(pdb)和指令. 2. 主要内容 2.1 构建类型 .net中默认的两种生成模式是 发布(Release)模式 ...
随机推荐
- Microsoft Office 2007的ContentType
当从浏览器返回一个文件时,需要指定ContentType,以下是Office2007对应的值: "application/vnd.openxmlformats-officedocument. ...
- 玩转JS插件系列
说明:本系列文章只是通过学习JS插件源码来巩固自己的JS知识,不涉及任何商业目的,如有侵犯版权请尽快告知 一.UI 背景 对话框和灯箱 筛选及排序 反馈 弹出层 悬停 布局 图表 加载 圆边 滚动 标 ...
- Hadoop JobHistory
hadoop jobhistory记录下已运行完的MapReduce作业信息并存放在指定的HDFS目录下,默认情况下是没有启动的,需要配置完后手工启动服务. mapred-site.xml添加如下配置 ...
- Spark核心概念之RDD
RDD: Resilient Distributed Dataset RDD的特点: 1.A list of partitions 一系列的分片:比如说64M一片:类似于Hadoop中的s ...
- Codeforces Round #219 (Div. 2) B. Making Sequences is Fun
B. Making Sequences is Fun time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- 《你不知道的JavaScript》一
1.编译原理 尽管通常将 JavaScript 归类为"动态"或"解释执行"语言,但事实上它是一门编译语言. 在传统编译语言的流程中,程序中的一段源代码在执行之 ...
- js面向过程改写成面向对象--通用方法
响亮的标题:一个万能的,保底的.面向过程改写成面向对象的方法 前提朗读:很多刚接触js面向对象的时候都不知道如何能快速的写出一个面向对象的程序,这个是必然的现象,不是每一位学js的一上来就会写面向对象 ...
- Jmeter命令行方式启动
在性能测试过程中,我们常常遇到这样的问题,使用Jmeter的GUI界面进行大并发量的性能测试时,界面容易卡死,无法继续进行性能测试.通过使用命令行方式启动jmeter是一个不错的方式.下面就简单介绍一 ...
- Drupal8开发教程:模块开发——创建新页面
之前我们已经通过<Drupal8开发教程:认识.info.yml文件>对模块的YAML文件有了了解,今天我们来看如何通过模块开发的方式添加一个新的页面. 在 Drupal 7 中,通过模块 ...
- 【练习】sqlnet.ora
在SQLNET.ora文件中设置以下参数可以实现IP访问限制: $ pwd/u01/app/oracle/product/10.2.0/db_1/network/admin$ vi sqlnet.or ...