在C#

时间:2017-05-29 04:24:21

标签: c#

我已经开始学习C#几年了(我主要使用C ++),在那段时间里,我已经在getset为每个字段手动编码。< / p>

我最近阅读了有关Accessors以及如何编写代码的方法......

    private string _colour;
    public string Colour
    {
        set
        {
            _colour = value;
        }
        get
        {
            return _colour;
        }
    }

从Color中分配和获取值,将执行setget方法以使用修改或从_colour获取值。但是,我对它是如何工作有点不清楚。这不会超过正常记忆吗?我们不是在内存中创建2个字符串字段大小的对象吗?

我尝试使用Color而不是Color和_colour,并更改getset块来修改字段本身,但这总是以无限循环结束。

我们最好按照上面显示的方式行事吗?或者制作我们自己的getset方法?

1 个答案:

答案 0 :(得分:4)

  

我们不是在内存中创建2个字符串字段大小的对象吗?

没有。 Colour 不是字段。这是一个不同的财产。编译器将属性仅实现作为两个get / set方法。没有新的内存需要。如果你愿意,你可以滥用这个特性来声明两个奇怪命名的方法,用奇怪的赋值/读取语法来调用它们。就是这样。

此外,对于简单属性,您还可以避免手动创建支持字段:

public string Colour {get;set;}

这会创建一个自动实现的属性,它仍然在后台使用getset方法,并为您提供了良好的属性语义,而无需手动编写码。

您甚至可以拥有没有自己的支持字段的属性:

//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; }
}