通过阅读,我确定我正在经历与进入WPF时大多数人相同的过程。我来自嵌入式的挣扎。
以这些例子
int foo; //
int foo { get; set; } //c#
public int foo{ get => foo; set => foo= value; }
private int _foo;
public int foo{ get => _foo; set => _foo= value; }
Run Code Online (Sandbox Code Playgroud)有人可以给我一个明确的答案,为什么所有吸气剂和吸气剂。
-它只是一个视觉工作室及其自动完成设置吗?
-是因为线程和foo在幕后被标记为易失性吗?
-还是发生了其他事情。
跟进
任何学习和为数据绑定而苦苦挣扎的人,“ 580”回复中“绑定”下的链接是迄今为止我所遇到的最好的例子,可以帮助您理解语法。我还遇到了Visual Studio的“ ReSharper”,它使您了解错误以及使用正确方法进行修复的正确方法。使用示例和重新磨合器,我在3小时内比上周了解了更多信息。
在这种情况下,get和set语法指示C#中的什么称为属性。属性不是特定于WPF,Visual Studio,线程或volatile关键字的。属性只是C#语言的一种构造。MSDN-属性
如果您来自嵌入式世界,我在这里假设具有C / C ++背景。C#中的普通旧标准成员变量称为字段。属性表示成员变量有些曲折。
关于为什么在各处都可以找到get和set关键字的明确答案是由于它们在属性中的使用。属性被广泛使用,因为通常认为它们比在大多数情况下使用字段更好。它们允许进行更细粒度的访问控制。我建议您仔细阅读Jon Skeet C#的这篇文章,深入探讨-属性为何如此重要
属性与领域
现在,对于某些细节,属性与字段有所不同,因为它们可以定义每次发生读取(获取)或修改(设置)时要执行的其他功能。此功能是隐式发生的,因此属性的使用者甚至可能不知道它。这一抽象层是为什么认为属性比字段更有价值的原因之一。
虽然属性不一定总是如此,但通常会封装传统上属于同一类型的私有字段。使用标准语法时{ get; set; },编译器将自动生成与属性相同类型的私有字段。这称为自动属性。例:
public string Title { get; set;}
Run Code Online (Sandbox Code Playgroud)
将由C#编译器转换为以下形式。
private string title;
public string Title
{
get
{
return title;
}
set
{
title = value;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您自己手动/明确定义私有字段,则该字段将称为后备字段,有时也称为后备存储。您的示例#3和#4中的两个代表了这一点,其中#4显然更是如此。
如前所述,并非所有属性都需要封装字段。这是仅返回字符串文字的属性的示例。
public string RandomText { get { return "Foo"; } }
Run Code Online (Sandbox Code Playgroud)
现在来看您的示例:
捆绑
关于数据绑定的有用阅读。MSDN-数据绑定