Type和Class有什么区别?

yes*_*aaj 136 language-agnostic glossary types programming-languages class

什么使一个类型与类不同,反之亦然?

(在一般语言不可知的意义上)

yes*_*aaj 112

以下答案来自Gof book(Design Patterns)

对象的定义了对象的实现方式.该类定义了对象的内部状态及其操作的实现.

相反,对象的 类型仅指其接口 - 它可以响应的一组请求.

对象可以有多种类型,不同类的对象可以具有相同的类型.

//example in c++
template<typename T> 
const T & max(T const & a,T const &b)
{
return a>b?a:b;  //> operator of the type is used for comparison
}
Run Code Online (Sandbox Code Playgroud)

max函数需要一个带有operation>的类型作为其中一个接口,满足上述要求的任何类都可以用来为该类生成特定的max函数.


Edd*_*ker 54

我一直认为"类型"是"阶级"和"原始"的总称.

int foo; // Type is int, class is nonexistent.

MyClass foo; // Type is MyClass, class is MyClass

  • 简洁明了的解释:) (7认同)
  • 好吧,在.NET中它应该是相同的,甚至原语是类(或更精确的结构). (3认同)
  • @dalle:同意,类型和类之间没有固有的区别.Eddie的例子非常依赖C++/Java.它根本不是定义. (3认同)
  • int不仅仅是System.Int32的简写吗?换句话说:int foo; //类型为int,类为System.Int32? (2认同)

min*_*ins 42

维基百科的启发......

类型理论术语中;

  • 类型是一个抽象接口.
    类型通常代表名词,例如人,地点或事物,或名义化的东西,

  • 表示的类型的实施方式.
    它是一个具体的数据结构和子程序集合

    不同的具体类可以生成相同抽象类型的对象(取决于类型系统).

    *例如,可以实现具有两个类型 :( 对于小堆栈而言速度很快,但是扩展性很差)和(对于小堆栈,可以很好地扩展但是开销很高).*StackSmallStackScalableStack

    类似地,给定的类可能有几个不同的构造函数.

在此输入图像描述

香蕉的例子.

  • 一种Banana 类型通常代表香蕉的特性和功能.

  • 这些ABCBananaXYZBanana 将代表生产香蕉的方式.
    (现实生活中不同的香蕉供应商,或在视频游戏中代表和绘制香蕉的不同数据结构和功能).

    所述ABCBanana然后类可以产生特定香蕉其是 实例的的ABCBanana ,它们将对象类型香蕉.

程序员为类型提供单一且唯一的实现并不罕见.在这种情况下,名通常与类型名称相同.但是仍然存在一种类型(如果需要可以在接口中提取),以及构建类的实例(对象)的实现(将实现单独的接口).

  • 作为一个努力学习的人,除非给出一个真实世界的例子,这真的对我有帮助.谢谢. (3认同)

Lon*_*nzo 13

Type是所有可用对象模板或概念的总称.类是一个这样的对象模板.结构类型,整数类型,接口类型等也是如此.这些都是类型

如果你愿意,你可以这样看:类型是父概念.所有其他概念:类,接口,结构,整数等都继承自这个概念.它们是类型


Seb*_*Nag 8

摘自以下 GoF 引文:

对象的定义了对象的实现方式。类定义了对象的内部状态及其操作的实现。

相比之下,对象的 类型只涉及它的接口——它可以响应的一组请求。

我想提供一个使用 Java 的例子:

public interface IType {
}

public class A implements IType {
public A{};
}

public class B implements IType {
public B{};
}
Run Code Online (Sandbox Code Playgroud)

A和 都B实现了接口,因此属于 类型IType。此外,在 Java 中,两个类都生成自己的类型(分别对应于它们的类名)。因此,类AA and 类型的IType并且类B是类型B IType满足的:

一个对象可以有多种类型,不同类的对象可以具有相同的类型。

子类型和子类之间的差异也可能有助于理解这个问题:

https://www.cs.princeton.edu/courses/archive/fall98/cs441/mainus/node12.html


Sev*_*ate 6

在与语言无关的一般意义上 - ClassType实现

通常,当这是该类型的唯一实现时,您可以在某些上下文中使用这两个术语来引用它。

相反,例如,在 C# 上下文中 -只是类型概念(基元、结构、指针等)的众多实现之一。