我在过去的一篇论文中有一个考试问题,我试图回答:
在编程语言的上下文中讨论类型为primitive,reference和static的变量。举个合适的例子[8]。
我到目前为止的答案是:
基本类型是语言已给出预定义值的对象。这些类型包括int,bool和float。引用类型对象在实例化时以特定顺序引用这些基元类型。这些的示例是字符串和数组。 static关键字在分配给变量时,意味着此变量只有一个实例,并且赋值的值适用于变量的所有引用。
我对编程很新,所以我不知道这是否完全正确,所以如果有人能给我一些关于如何改进标记的提示,我会得到这个问题我会做的。我非常感激。
答案 0 :(得分:1)
你肯定是在正确的轨道上,但是你缺少一些关于这些的基本概念。此外,3不是相互排斥的:
原始类型只是编译器为Framework Class Library或FCL类型定义的语法快捷方式。
引用类型是表示类实例的指针。它们指向的对象在堆上分配,变量的值是该对象的内存地址而不是类本身。
静态根本不是一种类型,但实际上定义了可以使用字段,属性,方法和类的位置和时间。静态变量存在于类而不是实例上。第一次访问类时会调用静态构造函数。可以从类定义中调用静态方法。这解释了在创建和销毁静态变量时看到的持久性。
答案 1 :(得分:1)
原始类型是语言给出的对象 预定义值
为什么呢?即使引用也可以具有预定义值,如上所述对于原始(内置)类型,您可能希望说这些是语言提供内置支持的类型。您的教师可能很高兴听到的是,如果您说大多数原始类型也是C#中的值类型,您可能想要讨论值类型语义(例如,值类型变量直接包含值 - 而引用变量只包含一个地址对记忆中的某个对象。)
再次关于引用类型,您可能会说引用变量不直接包含值或对象 - 而只是对它的引用。现在再次,您可能想讨论引用语义。例如,如果有两个引用变量指向同一个对象 - 并且您从一个引用更改了对象,则从另一个引用中也可以看到更改 - 因为两个引用都指向同一个对象。值类型不是这种情况。如果将相同的值类型对象分配给两个不同的值类型变量并更改一个变量 - 此更改将在第二个值类型变量中不可见,因为它们中的每一个都直接保存值(例如,每个变量都有自己的值类型的副本它被分配给的变量。)
您已经描述的静态类型。
答案 2 :(得分:-1)
在我看来,这个问题的答案与OOP无关,而与编译器和微处理器有关。
包含原始类型所有品质的术语的最简单和最准确的定义 - 据我所知 - 是:
原始类型必须适合用于操作的寄存器 - IOW,在X86系统中 - 累加器。
因此,原始类型仅限于累加器的大小,并且可以由本机处理器指令操作。 (基本数学和布尔/位移操作)。是的,它适合堆内存和堆栈,但那些仍然是8位实体,寄存器不是。
OOP语言不使用原始类型作为其托管内存进程,它们使用模仿原始类型的结构。 (即使在.NET中,当您使用关键字int时 - 它使用System.Int32来包装它。)