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

简介:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/803156


相关文章
|
3月前
|
存储 C#
C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析
方法是一段代码,只有在调用时才会运行。 您可以将数据(称为参数)传递给方法。 方法用于执行某些操作,也被称为函数。 为什么使用方法?为了重用代码:定义一次代码,然后多次使用。
43 0
|
4月前
自定义封装一个方法让这个方法可以判断所有的数据类型并返回
自定义封装一个方法让这个方法可以判断所有的数据类型并返回
15 0
|
9月前
|
Java 编译器
重载的方法能否根据返回类型进行区分?
重载的方法不能根据返回类型进行区分。方法的重载是基于方法名称和参数列表来进行区分的,与返回类型无关。这是因为在Java中,编译器在确定要调用哪个重载方法时,仅根据传递给方法的参数来进行决策。
230 0
|
10月前
|
编译器 C++
C++中构造函数调用规则
C++中构造函数调用规则
64 0
|
11月前
22-函数的分类及调用
22-函数的分类及调用
|
12月前
|
存储 编译器 程序员
C++之RVO返回值优化
C++进阶之RVO
96 0
|
编译器 C++
C/C++普通函数与函数模板的区别,调用规则,模板局限性
C/C++普通函数与函数模板的区别,调用规则,模板局限性
82 0
C/C++普通函数与函数模板的区别,调用规则,模板局限性
|
JavaScript 前端开发 Shell
TypeScript 4.6 beta 发布:递归类型检查增强、参数的控制流分析支持、索引访问的类型推导
TypeScript 已于 2022.1.21 发布 4.6 beta 版本,你可以在 [4.6 Milestone](https://github.com/microsoft/TypeScript/milestone/151) 查看所有被包含的 Issue 与 PR。如果想要抢先体验新特性,执行: ```bash $ npm install typescript@beta ``` 来安装 b
|
机器学习/深度学习 测试技术 算法框架/工具
第11章 项目:声呐返回值分类
第11章 项目:声呐返回值分类 本章我们使用Keras开发一个二分类网络。本章包括: 将数据导入Keras 为表格数据定义并训练模型 在未知数据上测试Keras模型的性能 处理数据以提高准确率 调整Keras模型的拓扑和配置 我们开始吧。
1616 0
接口中带参方法,传入IB类型的数据
不同的接口有不同的方法 不同的类有不同的作用 不同的作用产生不一样的效果 不同的效果让程序看似复杂,实际简单... 比如此程序,看似复杂,实际就那么点事: 谁生成了谁,谁设置了谁,谁传入了谁,谁被谁调用,谁被谁输出. 如果还是不明白,好记一些就是这个程序之中有两个接口,两个类,四个方法...它们通过创建方法,设置方法的参数值, 有的方法通过其它的对象进行了调用,有的则通过了调用者本身(this),最后随着最后的大括号结束,程序结束了. 世界再次恢复了平静.将编程看作是一门艺术,而不单单是个技术。
1044 0