第九章 管理类型(In .net4.5) 之 继承机制
1. 概述
本章包括 设计和实现接口、创建和使用基类 以及 使用.net类库提供的标准接口。
2. 主要内容
2.1 设计和实现接口
一个接口包含公共的方法、属性、事件、索引器。类和结构都可以实现接口。
interface IExample
{
string GetResult();
int Value { get; set; }
event EventHandler ResultRetrived;
int this[string index] { get; set; }
} class ExampleImplementation : IExample
{
//只能都是public实现
public string GetResult()
{
return "result";
} public int Value { get; set; } public event EventHandler CalculationPerformed; public event EventHandler ResultRetrived; public int this[string index]
{
get { return ; }
set {}
}
}
2.2 创建和使用基类
① 使用 virtual 和 override 关键字,可以在子类中重写父类的方法。
② 如果父类的方法没有标记为virtual,子类中可以用 new 关键字显示隐藏父类的方法。new方法只能被子类对象自己调用。
③ 抽象类和密封类
abstract class Base
{
public virtual void MethodWithImplementation() {//...}
public abstract void AbstractMethod();
} class Derived : Base
{
public override void AbstractMethod() {//...}
}
与抽象类对应的是密封类,密封类不能被继承,所有成员必须提供实现。结构体(struct)就是一种隐式的密封类。
2.3 使用.net类库提供的标准接口
① IComparable: 只有一个方法( int ComparaTo(object obj) ). 用于提供排序支持。有泛型版本。
class Order : IComparable
{
public DateTime Created { get; set; } public int ComparaTo(object obj)
{
if (obj == null) return ; Order o = obj as Order; if (o == null)
throw new ArgumentException("Object is not a Order."); return this.Created.ComparaTo(o.Created);
}
} List<Order> orders = new List<Order>
{
new Order { Created = new DateTime(, , ); }
new Order { Created = new DateTime(, , ); }
new Order { Created = new DateTime(, , ); }
}; orders.Sort();
② IEnumerable
IEnumerable 和 IEnumerator 接口用于实现遍历模式。
class Person
{
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
} public string FirstName { get; set; }
public string LastName { get; set; } public override string ToString()
{
return FirstName + " " + LastName;
}
} class People : IEnumerable<Person>
{
public People(Person[] people)
{
this.people = people;
} Person[] people; public IEnumerator<Person> GetEnumerator()
{
for (int index = ; index < people.Length; index++)
{
yield return people[index];
}
} IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
*yield关键字只能用于迭代块(iterators)中,编译器会将这段代码转化成状态机,并生成相应的集合遍历代码。
③ IDisposable: 用于跟外部资源或非托管代码更好的协同工作。只有一个Dispose方法,用于释放非托管的资源。
④ IUnknown
一般情况下,只需添加COM对象引用,编译器就会生成相应的交互类。
如果由于某些原因无法生成,就需要自己写交互类。这个时候就会用到IUnknown接口。
3. 总结
① 接口声明了一些必须被实现的公共成员。
② 基类可以将方法标记为virtual,这样子类就可以重写这些方法,增加或者修改具体实现。
③ 抽象类不能被实例化,只能当做基类使用。
④ 密封类不能被继承。
⑤ .net类库提供了一些默认接口供使用:IComparable, IEnumerable, IDisposable, IUnknown.
第九章 管理类型(In .net4.5) 之 继承机制的更多相关文章
- 第十一章 管理类型(In .net4.5) 之 管理对象的生命周期
1. 概述 本章内容包括 管理非托管资源.使用IDisposable接口 以及 管理析构器和垃圾回收. 2. 主要内容 2.1 理解垃圾回收机制 ① 代码执行的时候,内存中有两个地方存放数据项:堆 和 ...
- 第十二章 管理类型(In .net4.5) 之 操作字符串
1. 概述 本章包括 字符串基本操作 以及 查找.遍历.格式化字符串. 2. 主要内容 2.1 在.net平台中使用字符串 C#中,string是用来保存文本信息的.是一个被当做值类型使用的引用类型. ...
- 第七章 管理类型(In .net4.5) 之 使用类型
1. 概述 本章介绍 值类型的装箱拆箱.类型转换 以及 C#4.0新推出的 dynamic 关键字. 2. 主要内容 2.1 装箱和拆箱 2.2 类型转换 有四种方式可以实现类型转换: ① 隐式转换: ...
- 第六章 管理类型(In .net4.5) 之 创建类型
1. 概述 本章内容包括 C#5中如何更好的创建类型以及如何扩展现有类型. 2. 主要内容 2.1 如何选择类型 C#类型系统包括三种类型:值类型.引用类型.指针类型.(指针类型用于非托管代码,很少使 ...
- 第十章 管理类型(In .net4.5) 之 使用反射
1. 概述 一个.net程序不仅包含代码和数据,还包含 元数据. 本章介绍如何应用attributes以及如何使用反射来获取它,还有如何使用CodeDom和expression trees来实现在运行 ...
- 第八章 管理类型(In .net4.5) 之 加强封装
1. 概述 本章内容包括 访问控制符.属性 和 显式接口实现. 2. 主要内容 2.1 访问控制符 封装的核心是隐藏信息.访问控制符用来实现类型成员的访问控制. C#的访问控制符有:public, i ...
- LinuxShell脚本攻略--第九章 管理重任
收集进程信息 $ ps PID TTY TIME CMD pts/ :: bash pts/ :: ps$ ps -f #-f 显示更详细的信息UID PID PPID C STIME TTY TI ...
- kubernetes第九章--管理机密信息
- 20190819 On Java8 第九章 多态
第九章 多态 向上转型回溯 可扩展性 由于多态机制,在一个设计良好的面向对象程序中,许多方法,只与基类接口通信.这样的程序是可扩展的,因为可以从通用的基类派生出新的数据类型,从而添加新的功能.那些操纵 ...
随机推荐
- MySql存储过程学习总结
创建存储过程 1.格式 MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,...]]),举个例子: CREATE PROCEDURE proc1 (OUT s ...
- 能在手机播放的Flash代码
有些使用Flash的广告图片变换代码在手机不支持,在网上搜到了一个解决的方法: Flash嵌入处: <iframe style="width:474px;height:276px; b ...
- 实现web页面按比例缩放
对于web的掌握限于可以看懂别人的代码,并在框架中作相应修改或增加. 今天把另一个项目中的网页源代码粘过来做一个页面,结果问题百出. 首先,同样的代码,放在自己的项目里,页面排版错乱,看了下,引用的w ...
- 学习练习 Oracle数据库小题 Students
- 生成Excel直接以流或字节形式发给客户端,无需在服务生成一个实体文件。
public ActionResult ExportAgentBooking(string Company_Id, string Company_Name)//Altman.Web.BCDAdmin. ...
- java中sesion
Session *Cookie基于客户端,不安全,并且大小和个数的限制. *Session域对象,范围一次会话范围,存个人相关的数据. *setAttribute(String ...
- IOS异步和多线程操作&&在sqlite3中的应用
1,数据库I/O操作(异步) 数据库本身是存储在磁盘上.访问和修改数据库,即对磁盘进行读写,即I/O操作. 磁盘属于计算机硬件,具有DMA能力,不需要CPU干预,可以实现异步操作. I/O操作一般是消 ...
- CSS 宝库
Cascading Style Sheets, 层叠样式表单或者层叠样式表.简称CSS. 目的是为了表现HTML或者XML的样式. 可以做到网页内容和表现的分离.可以说,CSS是一种表现语言. h5禁 ...
- 【Hibernate 9】悲观锁和乐观锁
一.锁的基本简介 1.1,为什么需要锁 首先,锁的概念产生,主要是为了解决并发性的问题.什么是并发性问题呢,比如: Angel现在银行有个账号,里面有存款1000块.现在,Angel的账户,在两个地方 ...
- C++ 学习基础一
1.预处理器指示符如果文件名用尖括号“<”和”>”括起来的,则表示该文件是工程或标准头文件,查找过程会检查预定义的目录.如果文件名用双引号括起来,则表示该文件是用户自定义的头文件,查找该文 ...