周围的一些小的结构踢在回答this post,我遇到了意外以下内容:自动属性和结构不要混合?
以下结构,使用一个int字段是完全合法的:
struct MyStruct
{
public MyStruct (int size)
{
this.Size = size; // <-- Legal assignment.
}
public int Size;
}
但是,下面的结构,使用自动属性不会编译:
struct MyStruct
{
public MyStruct (int size)
{
this.Size = size; // <-- Compile-Time Error!
}
public int Size{get; set;}
}
返回的错误是“不能使用‘这个’对象之前所有字段被分配到”。我知道这是一个结构的标准过程:任何属性的后台字段必须从结构的构造函数中直接分配(而不是通过属性的set访问器)。
一种解决方法是使用一个明确的支持领域:
struct MyStruct
{
public MyStruct(int size)
{
_size = size;
}
private int _size;
public int Size
{
get { return _size; }
set { _size = value; }
}
}
(请注意,VB.NET不会有这个问题,因为在VB.NET所有领域都将自动初始化为0 /空/假时第一个创建。)
这似乎是一个不幸的限制时,使用C#中的结构自动属性。从概念上思考,我在想,如果这不是一个合理的地方,那么允许在结构的构造函数中调用属性集访问器的异常,至少对于自动属性来说呢?
这是一个小问题,几乎是一个边缘的情况下,但我不知道别人怎么想这个...
C#中的字段也被初始化为0/null/false。记住它的运行时间,而不是特定的语言。 ;) – 2009-02-11 06:00:37
不适用于C#中结构体的字段。对于一个结构体来说,如果使用隐式的,无参数的构造函数,这些字段必须由显式构造函数或调用者初始化。 VB.NET没有这个限制,因此,上面那个不能用C#编译的例子会在VB.NET中编译和运行得很好。 – 2011-03-26 02:08:17
可能的重复[为什么有必要调用:this()在结构上使用c#自动属性?](http://stackoverflow.com/questions/272153/why-is-it-necessary-to-call -this-on-a-struct-to-use-automatic-properties-in-c) – nawfal 2013-06-03 17:59:50