现在的位置: 首页 > 综合 > 正文

18.1.2 选言推理:为什么重载策略不能包含返回值

2013年08月16日 ⁄ 综合 ⁄ 共 1113字 ⁄ 字号 评论关闭

该系列不是讨论关键字的用法或用处,是推测为什么会有这样的设计和规范,是大脑训练工厂

 

 

 

 

在推理中,我们可以使用一种叫悖论的技巧,就是说如果某种假设成立,则现实中发生的现象将不可能存在,如果要求现实中的现象合理,就必须重新设立假设。这种模式其实质是一种选言推理。

我们先了解什么是断言推理: 选言推理是根据选言命题的逻辑性质而进行的推理。选言命题有相容与不相容之分,相应地,选言推理分为相容选言推理和不相容选言推理两种。

相容选言推理就是以相容选言命题为前提,根据相容选言命题的逻辑性质进行的推理。相容选言推理有两条规则:

n 规则1:否定一部分选言支,就要肯定另一部分选言支

n 规则2:肯定一部分选言支,不能否定另一部分选言支

典型的案例是: A是程序员或者是作家,A不是作家,则A是程序员。很重要的是规则2,如果我们这样判断就是错的:A是程序员或者是作家,A是作家,则A不是程序员。这样违法了第二规则,因为A可能既是程序员也是作家。

不相容选言推理就是以不相容选言命题为前提,根据不相容选言命题的逻辑性质进行的推理。 不相容选言推理有两条规则:

n 规则1:否定一部分选言支,就要肯定另一部分选言支

n 规则2:肯定一部分选言支,就要否定另一部分选言支

典型的案例是:要么A是冠军,要么B是冠军。A不是冠军,则B必定是冠军。

现在我们来推理我们本次的主题:函数的重载竟然不包含返回值!这个现象让很多人百思不得其解,本节我们将向读者说明为什么重载不能包含返回值。

重载:每个类型成员都有一个唯一的签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。只要签名不同,就可以在一种类型内定义具有相同名称的多种方法。当定义两种或多种具有相同名称的方法时,就称作重载。不过重载的策略中不包含返回值。

我们可以设计一系列方法名称相同,但参数列表不相同的函数,为类的使用者提供非常丰富的功能组合。我们可以想像下,如果重载允许有返回值,我们不就可以为用户提供更加丰富的组合吗?那为什么C#不允许在重载策略中包含返回值呢?

原因在于有一种函数叫:构造函数!构造函数是具有与类相同的名称但没有返回值的函数。

现在我们定义选言命题为:要么重载能实现在所有函数规则上,要么构造函数不是函数。

现在我们就遇到了由选言命题引发的悖论了:如果重载策略包含了返回值,那么构造函数就不能完整的实现重载策略。如果要求构造函数必须有返回值,则显然和事实不符。如果要求构造函数也能完整的实现重载策略,则重载策略必须不能包含返回值。

你看,为了解决这个悖论,我们对上述的选言命题只能作选言命题,即结果是:重载必须实现在所有函数规则上。那么为了满足所有函数的规则,那么重载只能放弃包含返回值了。

抱歉!评论已关闭.