声明、实例化、初始化和分配对象的含义
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;
你声明了一个名为 a
的 int
但你仍然没有初始化它。
实例化用于类对象。意味着用新的引用创建一个新的对象。对于 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++ 中那样声明方法没有任何对比。以上是关于声明、实例化、初始化和分配对象的含义的主要内容,如果未能解决你的问题,请参考以下文章