结构具有以下特点:
-
结构是值类型,而类是引用类型。
-
向方法传递结构时,结构是通过传值方式传递的,而不是作为引用传递的。
-
与类不同,结构的实例化可以不使用 new 运算符。
-
结构可以声明构造函数,但它们必须带参数。
-
一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object。
-
结构可以实现接口。
-
在结构中初始化实例字段是错误的。
--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=
// CS0573.cs
namespace x
{
public class clx
{
public static void Main()
{
}
}
public struct cly
{
clx a = new clx(); // CS0573
// clx a; // OK
int i = 7; // CS0573
// int i; // OK
}
}
错误消息
“field declaration”: 结构中不能有实例字段初始值设定项
不能对 struct 的实例字段进行初始化。值类型的字段将被初始化为其默认值,而引用类型字段将被初始化为 null。
--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=
// CS0568.cs
public struct ClassY
{
public int field1;
public ClassY(){} // CS0568, cannot have no param constructor
// Try following instead:
// public ClassY(int i)
// {
// field1 = i;
// }
}
public class ClassX
{
public static void Main()
{
}
}
错误消息
结构不能包含显式的无参数构造函数
每个 struct 均已有一个将对象初始化为零的默认构造函数。因此,可以为结构创建的构造函数必须带有一个或多个参数。
--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=