我有以下代码由于输入了“ a”而无法使用.但是我认为即使没有访问器,它也无法工作,但它确实做到了:
class Program
{
a _a //with accessors it WONT compile
{
get;
set;
}
static void Main(string[] args)
{
Program p = new Program();
p._a.X = 5; //when both accessors are deleted, compiler does not
//complain about _a.X not being as variable
}
}
struct a
{
public int X;
}
它不起作用,因为“ a”是结构.但是,当我从“ _a”实例删除访问器时,它可以工作.我不理解为什么.
谢谢
解决方法:
值类型的主要特征是它们被复制而不是通过引用传递.
当您具有值类型和访问器时,从本质上来说,您会从方法中返回值类型,这会导致复制(以下两个示例相同):
ValueType Property { get { return x; } } // Will make a copy of x
ValueType Method() { return x; } // Will make a copy of x
如果现在分配给返回值,则意味着分配给x的副本.因此,对从属性返回的值所做的任何更改都将立即丢失.
当您删除{get; }访问者,您现在有了一个基本字段,例如:
int field;
要么
ValueType field;
这意味着没有副本,这意味着在分配给字段时,您将不再分配给副本.