大家好,在最近的教学过程中,在讲解struct时,发现了一个C#的陷阱,希望引起大家的注意,请看如下代码:
错误很明显发生在StructB中,为什么呢?原来C#的属性必须在构造器中初始化,而结构又不允许显示声明无参构造,所以就会有以上的编译错误,如何解决呢,代码如下:
也就是说结构在使用中不是说new和不new都可以的,如果在结构中定义了属性则必须通过new才可以使用。
public struct StructA { public int A; } public struct StructB { public int A { get; set; } }
在上面的代码中StructA中声明了一个公共的成员字段,而StructB则声明了一个公共属性,那区别在那里呢,测试代码:
class Program { static void Main(string[] args) { StructA a; StructB b; a.A = 10; b.A = 20;//编译未通过:使用了未赋值的局部变量"b" } }
class Program
{
static void Main(string[] args)
{
StructA a;
StructB b = new StructB();
a.A = 10;
b.A = 20;
}
}