18.1.2 选言推理:为什么重载策略不能包含返回值
来源:互联网 发布:红塔证券软件 编辑:程序博客网 时间:2024/05/22 04:59
该系列不是讨论关键字的用法或用处,是推测为什么会有这样的设计和规范,是大脑训练工厂
在推理中,我们可以使用一种叫悖论的技巧,就是说如果某种假设成立,则现实中发生的现象将不可能存在,如果要求现实中的现象合理,就必须重新设立假设。这种模式其实质是一种选言推理。
我们先了解什么是断言推理: 选言推理是根据选言命题的逻辑性质而进行的推理。选言命题有相容与不相容之分,相应地,选言推理分为相容选言推理和不相容选言推理两种。
相容选言推理就是以相容选言命题为前提,根据相容选言命题的逻辑性质进行的推理。相容选言推理有两条规则:
n 规则1:否定一部分选言支,就要肯定另一部分选言支
n 规则2:肯定一部分选言支,不能否定另一部分选言支
典型的案例是: A是程序员或者是作家,A不是作家,则A是程序员。很重要的是规则2,如果我们这样判断就是错的:A是程序员或者是作家,A是作家,则A不是程序员。这样违法了第二规则,因为A可能既是程序员也是作家。
不相容选言推理就是以不相容选言命题为前提,根据不相容选言命题的逻辑性质进行的推理。 不相容选言推理有两条规则:
n 规则1:否定一部分选言支,就要肯定另一部分选言支
n 规则2:肯定一部分选言支,就要否定另一部分选言支
典型的案例是:要么A是冠军,要么B是冠军。A不是冠军,则B必定是冠军。
现在我们来推理我们本次的主题:函数的重载竟然不包含返回值!这个现象让很多人百思不得其解,本节我们将向读者说明为什么重载不能包含返回值。
重载:每个类型成员都有一个唯一的签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。只要签名不同,就可以在一种类型内定义具有相同名称的多种方法。当定义两种或多种具有相同名称的方法时,就称作重载。不过重载的策略中不包含返回值。
我们可以设计一系列方法名称相同,但参数列表不相同的函数,为类的使用者提供非常丰富的功能组合。我们可以想像下,如果重载允许有返回值,我们不就可以为用户提供更加丰富的组合吗?那为什么C#不允许在重载策略中包含返回值呢?
原因在于有一种函数叫:构造函数!构造函数是具有与类相同的名称但没有返回值的函数。
现在我们定义选言命题为:要么重载能实现在所有函数规则上,要么构造函数不是函数。
现在我们就遇到了由选言命题引发的悖论了:如果重载策略包含了返回值,那么构造函数就不能完整的实现重载策略。如果要求构造函数必须有返回值,则显然和事实不符。如果要求构造函数也能完整的实现重载策略,则重载策略必须不能包含返回值。
你看,为了解决这个悖论,我们对上述的选言命题只能作选言命题,即结果是:重载必须实现在所有函数规则上。那么为了满足所有函数的规则,那么重载只能放弃包含返回值了。
- 18.1.2 选言推理:为什么重载策略不能包含返回值
- 返回值为什么不能用来区分重载?
- java为什么不能根据返回值重载?
- 为什么不能以返回值区分重载方法
- 返回值为什么不能作为重载的一个条件
- C++为什么不能通过函数返回值区分函数重载?
- 为什么不能通过返回值类型区分重载?
- 为什么不能根据返回类型区分重载?
- 为什么不能根据返回类型区分重载?
- 为什么运算符重载返回值使用&?
- 为什么线程函数不能有返回值
- struts 2中为什么抽象包不能包含action?
- 关于java重载为什么不能用不同返回值区分
- C++ 返回值为何不能判断成员函数重载
- 为何不能通过返回值来区分重载方法
- 在C++中,为什么构造函数不能有返回值?
- 在C++中,为什么构造函数不能有返回值?
- 为什么C++构造函数不能有返回值
- oracle迁移表空间
- 关于typedef的用法
- ASP.net开发系列之开篇
- Eclipse 快捷键(1)
- J2ME中,实现多线程的方法
- 18.1.2 选言推理:为什么重载策略不能包含返回值
- 测试成功代码
- Android IPC 通讯机制源码分析
- 用css改变button的样式-几款漂亮的样式
- VB与Windows API讲座(二) -萤幕抓取与萤幕保护程式
- 图像色深(bit depth)和位深度的区别
- 使用openamp实现FMS与JEE之间的通信
- 个人感受
- 面向接口编程详解(三)——模式研究