我已经开始学习C#几年了(我主要使用C ++),在那段时间里,我已经在get
和set
为每个字段手动编码。< / p>
我最近阅读了有关Accessors以及如何编写代码的方法......
private string _colour;
public string Colour
{
set
{
_colour = value;
}
get
{
return _colour;
}
}
从Color中分配和获取值,将执行set
或get
方法以使用修改或从_colour获取值。但是,我对它是如何工作有点不清楚。这不会超过正常记忆吗?我们不是在内存中创建2个字符串字段大小的对象吗?
我尝试使用Color而不是Color和_colour,并更改get
和set
块来修改字段本身,但这总是以无限循环结束。
我们最好按照上面显示的方式行事吗?或者制作我们自己的get
和set
方法?
答案 0 :(得分:4)
我们不是在内存中创建2个字符串字段大小的对象吗?
没有。 Colour
不是字段。这是一个不同的财产。编译器将属性仅实现作为两个get
/ set
方法。没有新的内存需要。如果你愿意,你可以滥用这个特性来声明两个奇怪命名的方法,用奇怪的赋值/读取语法来调用它们。就是这样。
此外,对于简单属性,您还可以避免手动创建支持字段:
public string Colour {get;set;}
这会创建一个自动实现的属性,它仍然在后台使用get
和set
方法,并为您提供了良好的属性语义,而无需手动编写码。
您甚至可以拥有没有自己的支持字段的属性:
//auto-implemented property describing the location of your object
public Point Location {get; set;}
//"shortcut"/convenience properties that rely entirely on backing fields elsewhere, with no new memory of their own
public int X
{
get { return Location.X; }
set { Location.X = value; }
}
public int Y
{
get { return Location.Y; }
set { Location.Y = value; }
}