从struct (C# Reference)
MSDN上:
使用new运算符创建结构对象时,将创建该对象并调用适当的构造函数。与类不同,可以在不使用new运算符的情况下实例化结构。如果不使用new,则所有字段都将被初始化,否则这些字段将保持未分配状态,并且无法使用该对象。
据我了解,除非您确保手动初始化所有字段,否则您实际上无法在不使用new的情况下正确使用结构。如果使用new运算符,则正确编写的构造函数将有机会为您执行此操作。
希望能清除它。如果您需要对此进行澄清,请告诉我。
编辑
有很长的评论主题,所以我想在这里补充一点。我认为理解它的最好方法就是尝试一下。在Visual Studio中创建一个名为“ StructTest”的控制台项目,并将以下代码复制到其中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace struct_test
{
class Program
{
public struct Point
{
public int x, y;
public Point(int x)
{
this.x = x;
this.y = 5;
}
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
static void Main(string[] args)
{
Point myPoint;
myPoint.x = 10;
myPoint.y = 20;
Console.WriteLine("My Point:");
Console.WriteLine("x = {0}, y = {1}", myPoint.x, myPoint.y);
Console.ReadKey(true);
}
}
}
玩吧。删除构造函数,看看会发生什么。尝试使用仅初始化一个变量的构造函数(我已经注释掉了一个……它将无法编译)。尝试使用和不使用新关键字(我已经注释掉了一些示例,取消注释并尝试一下)。
struct
是一个对象。您可能会误解的区别是值类型和引用类型之间的区别。