当前位置: 首页 > 面试题库 >

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

汪鸿波
2023-03-14
问题内容

多年前,当我开始面向对象编程时,给人的印象是变量(如果是正确的词)是“原始”(int,double等)或一流对象(String,JPane等)。最近关于Java和C#中的基元的答案对此予以加强(@DanielPryden:Java和C#中的基元类型是否不同?。但是,不知道C#ValueTypes是基元,对象还是其他野兽(例如第二类对象)。我看到SO只能使用first- class标签的一种,因此也许它不再是一个有用的术语。

我没有发现Wikipedia文章有用(“该主题的专家需要引起这篇文章的注意。”)。我将对主要与Java和C#相关的术语的分类和当前用法表示感谢(尽管其他语言可能会有所启发)。

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


问题答案:

问题是“一流对象”不是一个明确定义的概念。

通常的用法是有人说“对象”是一类 应该
具有所有属性X,Y和Z的事物。但是有些事物并不具有所有这些属性,但是它们有点客观的。因此,我们将前一个称为“第一类”对象,其余的称为“第一类”……并且可能不是对象。

问题在于,使事物成为“一流”对象所需的属性有许多视图。反对意见的人民没有共识。(例如,Java语言专家可能会激烈地争辩说,如果对象是基于模板的,则它只是一流的。)

关于“一流”的唯一真正可靠的见识将是您可以从Java和C#的相应语言规范中获得的见解。而且它们仅真正适用于相应语言/类型系统的范围内,而不适用于多种语言。

因此,“一流的Java对象”或“一流的C#对象”可能是有意义的,但从上下文中取出的“一流的对象”则没有意义。

那是我的看法…



 类似资料:
  • 主要内容:C++输入流和输出流本教程一开始就提到,C++ 又可以称为“带类的 C”,即可以理解为 C++ 是 C 语言的基础上增加了面向对象(类和对象)。在此基础上,学过 C 语言的读者应该知道,它有一整套完成数据读写(I/O)的解决方案: 使用 scanf()、gets() 等函数从键盘读取数据,使用 printf()、puts() 等函数向屏幕上输出数据; 使用 fscanf()、fgets() 等函数读取文件中的数据,使

  • 问题内容: 在最近的问题中,我收到了一些建议,以讨论除JavaScript以外的其他方面,其中函数是“一流”对象。与其他对象相比,“一流”在这种情况下是什么意思? 问题答案: 在计算机科学中,如果将编程语言视为一类对象,则该编程语言可支持一类函数(或函数文字)。具体地说,这意味着该语言支持在程序执行期间构造新函数,将它们存储在数据结构中,将它们作为参数传递给其他函数以及将它们作为其他函数的值返回。

  • 据我所知,基本类型是Scalar,数组是聚合的,但用户定义的类型呢?根据什么标准,我可以将它们分为两类?

  • 对终端操作的任何调用都会关闭流,使其无法使用。这个‘特性’带走了很多权力。 我想这不是技术上的原因。这个奇怪的限制背后的设计考虑是什么? 编辑:为了演示我所讲的内容,请考虑以下C#中快速排序的实现:

  • 问题内容: Java中的类,对象和实例是什么? 问题答案: Java(和任何其他编程语言)是根据类型和值建模的。从理论上讲,值是某种信息量的表示,类型是一组值。当我们说值X 是类型Y 的实例时,我们只是说X是类型Y的值集合的成员。 这就是“实例”一词的真正含义:它描述的是一种关系而不是事物。 Java编程语言的类型系统支持两种类型,原始类型和引用类型。引用类型进一步分为类和数组类型。Java 对象

  • 问题内容: 每当我学习垃圾收集器时,都会听到术语“对象图”。到底是什么意思? 问题答案: 对象具有对其他对象的引用,这些对象又可以具有对更多对象(包括起始对象)的引用。这将创建对象图,在可及性分析中很有用。例如,如果起始对象是可到达的(例如,它在线程的本地堆栈中),则图形中的所有对象都是可到达的,并且确切的垃圾收集器无法收集任何这些对象。同样,如果我们创建所有可到达对象的列表,则从一组活动对象(根