“实例化”和“初始化”之间有什么区别?

时间:2010-02-25 00:33:31

标签: vb.net variables

我听过微软VB.NET教程中使用的这两个词。当用于引用变量时,这两个单词之间有什么区别?

11 个答案:

答案 0 :(得分:123)

与参考类型相比的价值

C#中的

变量属于2组中的1组。 类型或参考类型。 intDateTime等类型是 value 类型。相反,您创建的任何类都是引用类型。 C#字符串也是引用类型。 .NET框架中的大多数内容都是引用类型。

变量的部分

有变量 name ,它的两部分

变量的名称是您 声明 的原因。 是您 分配 的内容。

变量已初始化

在变量声明时,所有变量总是被赋予初始值。因此,所有变量都 初始化

对于 value 类型,如int,如果您没有明确地执行此操作,编译器将为它们提供有效值。默认情况下,int 初始化 为零,DateTime 初始化

参考类型变量 初始化 到您提供的对象。如果不这样做,编译器将不会 分配 对象(即有效值)。在这种情况下,值为DateTime.MinValue - 没有。所以我们说引用 初始化 为null。

对象已实例化

人类出生。对象被实例化。宝贝是人类的实例,对象是某些类的实例

创建类的实例的行为称为 实例化 (Ta-Da!)

所以声明初始化实例化像这样

null

在上文中,说“......创建对象的实例 ...”是错误的。

存在的难以忍受的轻盈

引用类型变量的名称和值独立存在。我的意思是独立。

实例化的对象可能有也可能没有对它的引用。

实例化的对象可能有很多引用它。

声明的引用可能是也可能不是指向对象。

答案 1 :(得分:40)

使用值初始化变量。当为它分配内存并且它的构造函数已经运行时,对象被实例化。

例如,这是一个变量:

Dim obj as Object

此变量尚未初始化。一旦我为obj变量赋值,变量就会被初始化。以下是初始化的示例:

obj = 1
obj = "foo"

实例化是一个非常不同的东西,但是相关的,因为实例化后通常会进行初始化:

Dim obj As New Object()

在上一行代码中,obj变量已初始化,并引用了实例化的新Object。我们说新的Object已经实例化,因为我们已经创建了它的新实例。

现在我相信VB.NET比C#更令人困惑,因为上面的代码中正在进行赋值并不清楚。在C#中,更清楚的是实例的实例化和变量的初始化:

Object obj = new Object();

答案 2 :(得分:14)

初始化,要将其设置为初始值。要实例化,就要创建一个实例。

这通常或多或少是相同的。这样:

SqlConnection conn = new SqlConnection();

实例化 SqlConnection个对象,通过将conn变量设置为该实例来初始化

由于对象的构造函数也将对象的属性设置为其默认值,因此实例化对象初始化它通常是正确的。 (误导,如果对象公开了一个方法,你必须明确地调用它在实例化后初始化它,有时就是这种情况。)

答案 3 :(得分:4)

*实例化意味着为类或对象创建实例。初始化意味着*为任何目的启动相同的对象或类。**

答案 4 :(得分:3)

实例化表示已创建对象的实例。启动意味着同一个对象已经完成了一些初始化。

答案 5 :(得分:2)

当您实例化一个类或对象时,您正在创建它的新实例,或者分配内存以“保持”一个。初始化该对象将是在实例化期间执行的指令。

答案 6 :(得分:2)

实例化是指您创建类的实例。那个实例就是一个对象,你可以设置它的属性,或者在它上面调用方法(告诉它做什么)。

启动是指为某些事情设置一组初始条件。这个东西可能是一个对象,你告诉它自己启动,或者只是一个你赋值的变量。

对象可能会初始化其他一些内容,甚至可以将其他对象实例化为其启动的一部分。

不同之处在于实例化是创造可以做事的东西;启动是完成的事情。

答案 7 :(得分:1)

请参阅Java文档: https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html

Point originOne =新点(23,94);

Declaration: The code set in bold are all variable declarations that associate a variable name with an object type.
Instantiation: The new keyword is a Java operator that creates the object.
Initialization: The new operator is followed by a call to a constructor, which initializes the new object."

答案 8 :(得分:0)

实例化是指分配内存以创建类的实例,而初始化是指通过将变量名称分配给该实例来命名该实例。

例如:SqlConnection conn = new SqlConnection();

此处new是为实例分配内存的关键字,conn是为该实例分配的变量名。

答案 9 :(得分:0)

其他人已经解释了差异,所以我不会详细介绍。但是有些情况下实例化不能正确初始化对象。实例化对象时,还要使用一些数据对其进行初始化。类/类型将具有初始化逻辑,而实例化逻辑通常由new关键字执行(基本上是内存分配,引用复制等)。但实例化不一定会导致对象的有效状态,这时我们可以说对象是 uninitialzed 。这是一个实例,其中一个对象可以实例化但没有初始化(抱歉,例如在C#中)。

class P { string name = "Ralf"; }

WriteLine(new P().name); // "Ralf";
WriteLine((FormatterServices.GetUninitializedObject(typeof(P)) as P).name); // null

GetUninitializedObject没有调用构造函数来实例化那里的对象(但是有些内部魔法)。

还可以认为值类型没有实例化,只是初始化,因为当你执行new..时它不需要新的分配,但这取决于实例化的定义。

答案 10 :(得分:0)

我们可以这样看。对于下面的一行代码:

var p = new Person();

上述行可以通过以下两种方式阅读:

  1. 变量p已被初始化作为人员类
  2. 人类已在变量p
  3. 实例化

    参考或背景的主题。在谈论变量时,我们使用 initialize 这个词。在谈论 class / type 时,我们使用 实例化 这个词。