许多年前,当我开始面向对象编程时,我的印象是变量(如果这个词正确的话)要么是“基元”(int、double 等),要么是一等对象(String、JPane 等)。最近关于 Java 和 C# 中原语的回答强化了这一点(@Daniel Pryden: Java 和 C# 中的基本类型有何不同?)。但是不知道 C# ValueType 是否是基元、对象或其他一些野兽(例如二类对象)。我发现 SO 只有一种用途 first-class 标签,所以也许它不再是一个有用的术语。

我没有找到 维基百科文章 有用(“这篇文章需要该主题的专家关注。”)。我将感谢主要与 Java 和 C# 相关的分类法和术语的当前用法(尽管其他语言可能会有所启发)。

澄清: :我想理解这个词 头等舱 以及它的使用范围是什么。

有帮助吗?

解决方案

的问题是,“第一类对象”是不明确定义的概念。

在正常使用的情况是,有人说,“对象”是一类的东西的的具有所有属性X,Y和Z的,但有没有这样的其他东西所有这些特性,但它们的排序对象十岁上下的。所以我们称前者为“一流”的对象,其余的不是“一流” ......也可以,不是对象。

的问题是,有任何数量的对性能的观点,一个事需要具有使之成为“第一级”对象。并与反对意见没有人的前景来达成共识。 (例如,一个Javascript语言专家可能认为极力某个对象是唯一的第一类,如果它是基于模板的。)

关于“第一classness”将是那些可以从各自的语言规范Java和C#搜集的唯一真正可靠的见解。他们唯一真正的各自语言/类型系统的范围内适用......而不是跨多种语言。

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

嗯,这是我的意见了......

其他提示

这一概念的 "第一类公民"或"第一类元素" 在一种编程语言,介绍了英国计算机科学家 克里斯托弗*斯特雷奇 在1960年代的上下文中的第一流的功能。最着名的制定的这一原则可能是在 结构和解释计算机程序 通过杰拉尔德*杰斯曼和哈利阿伯尔森:

  • 他们可能被命名为通过变量。
  • 他们可能会通过了作为论据的程序。
  • 他们可以返回作为结果的程序。
  • 他们可能被包括在数据结构。

基本上,这意味着你可以用这种编程语言要素的一切,你可以做到与所有其他元素在编程语言。

在.NET中你没有原始类型VS类。相反,您有结构VS类,但结构有着许多的类(例如,以具有属性和方法的能力),以及,从所述Object类继承的特性。

当你在C#编写int,例如,它仅仅是对Int32结构语言的快捷方式。例如,您可以int i=int.Parse("34"),甚至string s=1234.ToString()做。为了分配结构实例类型Object的变量,有拳击/拆箱机构

在Java中,在另一方面,你确实是原始类型VS类dicotomy。因此,例如,对类型int的变量进行操作,必须使用辅助Integer类。这是的事情之一我不喜欢比较,.NET的Java。

修改即可。当你读到“第一类对象”(或类),它的意思是“完全供电对象”,即,具有相同的能力,任何其他系统类或用户自制类的类。这是从“限于原始类型”区分开来。

有关在Java中的每个基本数据类型,所述核心类库提供代表它作为Java对象的包装类。例如,的Int32类包装int数据类型,以及双类包装双数据类型。

在另一方面,在C#所有原始数据类型是在系统的命名空间的对象。对于每一个数据类型,一个简短的名称或别名,提供。例如,int是用于System.Int32短名称和双是System.Double的缩写形式。

C#的数据类型及其别名列表在下表中提供。正如你所看到的,这些对应的前八个在Java提供的基本类型。但是请注意,Java的布尔被称为布尔在C#。

自: HTTP:// MSDN .microsoft.com / EN-US /库/ ms228360%28VS.80,轻量%29.aspx

http://onjava.com/onjava/2003/05/21 /delegates.html

换句话说C#方法是第一类对象,因为我们可以在另一种方法中通过。我们可以使用像任何其他的值(字符串,数字,用户创建的对象)方法。

第一类别的另一实例对象u可以找到其他语言的罕见的,但C#是表达式

坦白说,我不知道什么是“一流的物体”......
但我首先在 Lua 文档和邮件列表中发现了类似习惯用法的用法,即函数是一等公民或一等值。

我让 Lua 的一位作者来解释一下它是什么: Lua 编程:6 - 有关函数的更多信息

这意味着,在LUA中,一个函数是具有与数字和字符串等传统值相同的权利的值。函数可以存储在变量(全局和本地)和表中,可以作为参数传递,并且可以通过其他函数返回。

不知何故,这个定义适用于 Java 中的对象:你可以将它们存储在变量、数组中,将它们用作函数参数并返回它们,将它们用作HashMap和其他集合的键等。
不确定这个术语是否用于对象,但至少它是有意义的......:-)

在像 C 这样的语言中,对象必须从头开始创建,使用一些技巧(重新创建 C++,不知何故......),所以它们不是一流的:你必须传递指针来操纵它们。

当我们谈论“第一类对象”的“对象”是指语言的一些概念,而不是对象,我们以该语言建立。这就是为什么还存在这样类似“一等公民”。

因此,例如,Java已经以下概念 - Java的对象,Java的原语,字段,方法和其他(由Java的对象我意味着什么是对象类型的实例)。我会说,Java中包括Java对象和Java的原语是一等公民的语言。

在C#我们有一些额外的概念,我们可以“测试”一流性质。例如,代表们。我们可以分配委托OT变量(得到名),它传递给该方法作为一个参数,从方法返回它,在合并的数据结构(具有词典代表例如)。因此,我认为我们可以说,代表们在C#中的第一类对象。您可以继续为C#等概念 - 事件,属性...

功能的语言有“功能”的概念,当然它是在任何功能性语言一流公民。我想说,我们可以称之为语言的函数式语言,如果它有“功能”作为一流的理念(姓名,通行证,回报,集...)。

所以,如果有些语言让我们可以在“措施”中的语言是自这个概念的力量的概念。

第一类型的对象是那些我们不使用“新”的关键字创建对象。 通常我们创建使用“新”的关键字,但在我们的编程,而无需使用“新”的关键字创建语言一些对象中的对象。

在java的“字符串”是第一类对象。它是一种Java概念,它并不适用于所有的编程语言一个机架概念。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top