我开始学习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
答案 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?