C# C语言中访问器的正确使用#
现在,我断断续续地学习C#on和off已经有几年了(我主要使用C++),在那段时间里,我一直在为每个字段手动编写C# C语言中访问器的正确使用#,c#,C#,现在,我断断续续地学习C#on和off已经有几年了(我主要使用C++),在那段时间里,我一直在为每个字段手动编写get和set 我最近读到了关于访问器的文章,以及如果你像这样编写它 private string _colour; public string Colour { set { _colour = value; } get { retur
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很公平,我加了一个“顺便问一下”。为什么在这个问题上投了反对票?有人这样问似乎很好,“你甚至可以拥有没有自己背景场的房产”