c# - 为什么我们需要 OOP 语言中方法的 void 返回类型?

标签 c# java oop

我不是昨天才开始学习 Java,而是突然想到,如果我们可以返回 this,为什么还要使用 void 方法?这样我们就可以在对象上链接方法调用并使代码更具可读性(我知道这种方法已经越来越流行,但主要是针对不可变对象(immutable对象),让我们忘记 Java Beans 约定)。我认为唯一需要 void 的情况是静态方法。

最佳答案

想必您会接受某些方法需要告诉您一些信息 - 某种返回值。我们会“返回我们想要返回的值,除非我们实际上不想返回任何东西,在这种情况下我们返回 this ,除非它是一个静态方法,这似乎是人为的和迟钝的,在这种情况下,我们返回 void”。

怎么样:

  • 如果适合返回,就返回
  • 如果不是,那就不要
  • (对于“流畅”的 API 真正有意义的情况有一些回旋余地)

另外:想想继承;如果我有一个虚拟方法 Foo(),那么返回类型必须是 Foo 的声明类型:

public virtual SomeType Foo() {...}

现在假设我将 SomeType 子类化为 Bar : SomeType 并且有一个 Bar 的实例:

Bar obj = new Bar();
obj.Foo().SomeOtherMethodOnBar(); // ERROR hey, where did my Bar go!?!?!

多态性不尊重流畅的 API。

作为最后的想法:当您实际上不想链接方法时,想想所有的“pop”...

关于c# - 为什么我们需要 OOP 语言中方法的 void 返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16540412/

相关文章:

c# - 后台worker中的进度条和后台运行方法

c# - C# 中的生产者-消费者队列中的 ArgumentException

c# - 如何在 C# 中将未包含在 datagridview 中的其他数据库值显示到另一个表单中?

java - docker 中的 Spring/Hibernate 应用程序不会删除列

java - 单击“下一步”时如何更改 EditTexts?

php - OOP PHP - 简单会计/财务系统的潜在类

c++ - 具有多重继承层次结构的 Liskov 替换原则

c# - 具有大量参数的 DAL 方法

java - Maven 项目 - Spring MVC 错误

c++ - 如何在派生类中调用基类的<<运算符