声明、实例化、初始化和分配对象的含义

Posted

技术标签:

【中文标题】声明、实例化、初始化和分配对象的含义【英文标题】:Meanings of declaring, instantiating, initializing and assigning an object 【发布时间】:2015-11-24 06:51:31 【问题描述】:

从技术上讲,声明实例化初始化分配一个对象的含义和区别是什么在 C# 中?

我想我知道分配的含义,但我没有正式的定义。

在msdn中,说“创建对象的行为称为实例化”。但是 creating 的含义对我来说似乎很模糊。你可以写

int a;

a 然后创建了吗?

【问题讨论】:

我从未见过clarifying。但instantiating 表示创建对象的实例。 initializing 表示为对象设置值。(不一定创建新实例)。 assigning 是自我描述的。给一个对象赋值。我可能错了。但这就是我的想法 仅供参考,int 是原始类型,而不是对象。 对不起,我的意思是声明。 声明就是你所展示的。就像 int a; 你声明了一个名为 aint 但你仍然没有初始化它。 实例化用于类对象。意味着用新的引用创建一个新的对象。对于 a=2 你说初始化。 【参考方案1】:

声明 - 声明一个变量意味着在程序中引入一个新变量。您定义它的类型和名称。

int a; //a is declared

实例化 - 实例化一个类意味着创建一个新的类实例。 Source.

MyObject x = new MyObject(); //we are making a new instance of the class MyObject

初始化 - 初始化一个变量意味着给它一个初始值。

int a; //a is declared
int a = 0; //a is declared AND initialized to 0
MyObject x = new MyObject(); //x is declared and initialized with an instance of MyObject

赋值 - 赋值给变量意味着为变量提供值。

int a = 0; //we are assigning to a; yes, initializing a variable means you assign it a value, so they do overlap!
a = 1; //we are assigning to a

【讨论】:

那么实例化不用于结构或简单类型? “初始化”可以表示“声明后第一次赋值”吗? 该术语用于结构,尽管老实说我不确定为什么。但是“实例化”不用于简单类型。是的,这基本上就是初始化的意思。 @MinimusHeximus【参考方案2】:

一般:

Declare 的意思是告诉编译器某些东西存在,以便为它分配空间。这与定义或初始化某事物不同,因为它不一定说事物具有什么“价值”,而只是说它存在。在 C/C++ 中,声明和定义之间有很大的区别。在 C# 中,区别要小得多,尽管这些术语仍然可以类似地使用。

Instantiate 字面意思是“创建一个实例”。在编程中,这通常意味着创建一个对象的实例(通常在“堆”上)。在大多数语言中,这是通过 new 关键字完成的。即:new object();。大多数情况下,您还将保存对对象的引用。即:object myObject = new object();.

Initialize的意思是给一个初始值。在某些语言中,如果您不初始化变量,它将包含任意(脏/垃圾)数据。在 C# 中,从未初始化的变量中读取实际上是一个编译时错误。

赋值只是将一个值存储到一个变量。 x = 5 将值 5 分配给变量 x。在某些语言中,赋值不能与声明结合,但在 C# 中可以是:int x = 5;

请注意,object myObject = new object(); 语句结合了所有这四个。

new object() 实例化一个新的 object 对象,返回对它的引用。 object myObject 声明一个新的 object 引用。 = 通过将引用的值赋给它来初始化引用变量。

【讨论】:

我们也有定义这个词吗? 定义是什么意思? @MinimusHeximus 定义意味着给一个值(或主体)。我们在 C# 中并没有真正使用“定义”太多,但它在初始化的含义上是相似的。当你编写一个方法时,我想你可以调用它来定义方法,尽管它与像在 C++ 中那样声明方法没有任何对比。

以上是关于声明、实例化、初始化和分配对象的含义的主要内容,如果未能解决你的问题,请参考以下文章

初始化类和实例化对象之间的区别?

java中的实例化对象有啥用???????

第十一章:类和对象

在 C++ 中初始化对象之前声明一个对象

Java对象初始化顺序

对象数组