5.3 可选值

5.3 可选值

 

    在上一节中,我们看了如何创建值,可以将多个值组合成一个。例如,我们取一个字符串值,和一个数字值,并创建一个复合值,包含一个字符串和一个数字。在本节中,你将看到如何构造一个值,它既可以包含字符串,也可以是数字。

    首先,让我们看一个示例,看什么时候,它可能是有用的。想象一下,我们正在写计划任务和会议应用程序,想要有几种方法指定日历。对于只发生一次的事件,我们想保存日期和时间。我们还希望允许重复发生的事件。对于这种类型的事件,需要保存开始发生的日期和时间,重复的事件之间的时间间隔。我们还要支持没有指定时间的事件,我们称之为不定期的事件。

    这意味着,我们要创建有三个不同选项的值,以指定计划:没有,一次,重复。在面向对象编程中表示多个选项的一种典型方法,是使用类层次,在基类中包含所有重要的抽象方法。在这里,我们不知道会如何使用 Schedule 类型,但是,一个有用的抽象方法可以返回的下一次计划发生的日期。图 5.1 显示了类层次结构图,有一个抽象类 Schedule,和三个选项的派生类。

image   

图 5.1 表示三种不同类型架构的类层次结构,每种情况具有不同的属性

 
    当使用这种表示时,我们以后可以在开发期间轻松地添加新的 Schedule 类型,但是,在这种情况下,我们并不期望经常这样做。另一方面,很有可能的是,我们要添加新的操作来使用计划。例如,我们可能要获取上一次发生,或者某个指定的发生的序号。所有这些操作只使用 GetNextOccurrence 虚方法是不能完成的。我们可以保留修改基类,但是,如果我们想将基本代码移动到一些共享库,使其更稳定,那又该如何呢?此示例有点简单,但在某种意义上,显示整个类层次的结构,还是有意义的。

    在 C# 中,我们可以实现,既可以使用类型测试,也可以更有效地通过添加 Tag 属性到基类的。其类型应该是一个枚举(示例, ScheduleType),有三个可能的值 (Never, Once, 和 Repeatedly)。

    一方面,这使代码可扩展差(通过添加新的计划类型),但是,它使我们能够轻松地编写方法来处理 计划。在 C# 3.0 中,我们甚至可以写扩展方法,来添加功能,使用点表示法很好地访问。

    如果你是 OOP 老手,你可能发现这种想法有点不寻常,但是,一旦更熟悉它以后,就会承认的情况下,它将有更多的帮助。另一方面,一个类似的原则,在数据库设计中是很常见的。当存储计划在数据库中时,就不可能添加新的计划类型了,但是,你一定能够添加新的存储过程来处理这些数据。我们很快将谈论面向对象和函数设计的利与弊,但是,首先让我们看看在 F# 中使用差别联合表示可选值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值