Java 和 C# 中的一等对象是什么?

2022-09-01 09:25:49

当我多年前开始OO编程时,我得到的印象是变量(如果这是正确的词)要么是“原语”(int,double等),要么是一类对象(String,JPane等)。最近关于Java和C#中基元的答案加强了这一点(@Daniel Pryden:Java和C#中的基元类型不同吗?)。但是,不知道C#ValueTypes是基元,对象还是其他一些野兽,例如二等对象。我看到SO只有一次使用标签,所以也许它不再是一个有用的术语。first-class

我没有发现维基百科的文章有用(“这篇文章需要该主题的专家的关注。我很感激术语的分类和当前用法,主要与Java和C#有关(尽管也许其他语言会有所启发)。

澄清:我想了解“一流”一词及其使用范围。


答案 1

编程语言中的“一等公民”或“一等元素”的概念是由英国计算机科学家克里斯托弗·斯特拉奇(Christopher Strachey)在1960年代在一等函数的背景下引入的。这个原则最著名的表述可能是Gerald Jay Sussman和Harry Abelson的《计算机程序的结构与解释》:

  • 它们可以由变量命名。
  • 它们可以作为参数传递给过程。
  • 它们可以作为程序的结果返回。
  • 它们可能包含在数据结构中。

基本上,这意味着您可以使用此编程语言元素执行与编程语言中的所有其他元素相同的所有操作。


答案 2

问题在于“第一类对象”不是一个定义良好的概念。

通常的用法是,有人说“对象”是一类应该具有X,Y和Z所有属性的事物。但是还有其他一些东西不具有所有这些属性,但它们有点像对象。因此,我们将以前的“一等”对象称为“一等”对象,其余的则不称为“一等”......并且可能不是对象。

问题在于,对于一个事物需要具有的属性,可以使其成为“第一类”对象,从而存在许多视图。而且,持相反观点的人没有达成共识的前景。(例如,Javascript语言专家可能会极力争辩说,如果一个对象是基于模板的,它只是第一类。

关于“一流”的唯一真正可靠的见解将是您可以从Java和C#的相应语言规范中收集到的见解。它们只真正适用于各自语言/类型系统的范围......而不是跨多种语言。

因此,“第一类Java对象”或“第一类C#对象”可能有意义,但脱离上下文的“第一类对象”却没有意义。

好吧,这就是我的意见...


推荐