Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中访问器的正确使用#_C# - Fatal编程技术网

C# C语言中访问器的正确使用#

C# C语言中访问器的正确使用#,c#,C#,现在,我断断续续地学习C#on和off已经有几年了(我主要使用C++),在那段时间里,我一直在为每个字段手动编写get和set 我最近读到了关于访问器的文章,以及如果你像这样编写它 private string _colour; public string Colour { set { _colour = value; } get { retur

现在,我断断续续地学习C#on和off已经有几年了(我主要使用C++),在那段时间里,我一直在为每个字段手动编写
get
set

我最近读到了关于访问器的文章,以及如果你像这样编写它

    private string _colour;
    public string Colour
    {
        set
        {
            _colour = value;
        }
        get
        {
            return _colour;
        }
    }
将值分配给颜色或从颜色中获取值,将执行
set
get
方法,以使用修改或从颜色中获取值。然而,我有点不清楚这是如何工作的。这不比正常的内存消耗更多吗?我们不是在内存中创建两个字符串字段大小的对象吗

我尝试只使用颜色而不是颜色和_颜色,并更改
get
set
块来修改字段本身,但这总是以无限循环结束

我们按照上面所示的方式做会更好吗?还是让我们自己的
get
set
方法

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

否。
颜色
不是字段。这是一种不同的属性。编译器仅将属性作为两个
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; }
}

顺便说一下:您的代码可以简化。只需编写
publicstringcolor{get;set;}
并删除私有变量
privatestringcolor它只创建一个内存分配-
专用字符串\u color
。你的方式很好。@KobyDouek——它没有回答这个问题——也许会让OP对这个问题更加困惑。@Enigmativity很公平,我加了一个“顺便问一下”。为什么在这个问题上投了反对票?有人这样问似乎很好,“你甚至可以拥有没有自己背景场的房产”