创建具有新对象和没有新对象的对象

时间:2019-04-26 08:31:41

标签: c#

我开始学习C#,发现有两种不同的创建对象的方法。 首先是这样:

 Box Box1 = new Box();   // Declare Box1 of type Box
 Box Box2 = new Box();   // Declare Box2 of type Box

其他是这个

 Box Box1 ;   // Declare Box1 of type Box
 Box Box2 ;   // Declare Box2 of type Box

两种方法都有效,有什么区别? C ++指针有类似的东西吗?

Box* Box1 = new Box();   // Declare Box1 of type Box
Box* Box2 = new Box();   // Declare Box2 of type Box

1 个答案:

答案 0 :(得分:3)

您的第二个示例声明了一个变量,但是它将为空并且无法访问:

Box b;
int id = b.Id; // Compiler will tell you that you're trying to use a unassigned local variable 

我们可以通过初始化null来欺骗编译器:

Box b = null; // initialize variable with null
try
{
    int id = b.Id; // Compiler won't notice that this is empty. An exception will be trown
}
catch (NullReferenceException ex)
{
    Console.WriteLine(ex);
}

我们现在看到,必须初始化变量才能访问它:

Box b; // declare an empty variable
b = new Box(); // initialize the variable

int id = b.Id; // now we're allowed to use it.

声明和初始化的简短版本是您的第一个示例:

Box b = new Box();

这是我用于示例的示例类:

public class Box
{
    public int Id { get; set; }
}

也许您确实注意到Id中的Box尚未初始化。这不是必需的(但大多数时候您应该这样做),因为它是值类型(struct)而不是防御类型(class)。

如果您想了解更多信息,请查看以下问题:What's the difference between struct and class in .NET?