wpf getters and setters

时间:2018-06-16 10:00:26

标签: c#

通过我所读过的内容,我确信我在进入WPF时经历了大多数过程。我来自嵌入式即时通讯挣扎。

采取这些例子

  1. int foo; //

  2. int foo { get; set; } //c#

  3. public int foo{ get => foo; set => foo= value; }

  4. private int _foo;
    public int foo{ get => _foo; set => _foo= value; }
    
  5. 有人,请给我一个明确的答案,说明为什么所有的吸气剂和制定者 - 它只是一个视觉工作室,它的自动完成设置?
      - 是因为线程和foo在幕后被标记为不稳定吗?
    - 或者是其他事情。

    跟进
    对于任何学习和挣扎于数据绑定的人来说," 580"回复"绑定"到目前为止,我遇到过最好的例子,让你了解语法。我也遇到了#34; ReSharper"对于visual studio,它使用正确的方法让您了解错误和正确的修复方法。使用示例和resharper我在3小时内比上周学到的更多。

1 个答案:

答案 0 :(得分:4)

这种情况下的get和set语法表示C#中的属性。属性不是特定于WPF,Visual Studio,线程或volatile关键字。属性只是C#语言的一个构造。 MSDN - Properties

如果你来自嵌入式世界,我假设你有一个C / C ++背景。 C#中的普通旧标准成员变量称为字段。属性表示成员变量,有点扭曲。

关于为何在任何地方找到get和set关键字的明确答案是由于它们在属性中的使用。属性被广泛使用,因为它们通常被认为是在大多数情况下使用字段的更好的实践。它们允许更细粒度的访问控制。我建议您阅读Jon Skeet的这篇文章C# In Depth - Why Properties Matter

属性与字段

现在,对于某些细节,属性与字段的不同之处在于,它们可以定义每次发生读取(get)或修改(set)时执行的其他功能。该功能隐式发生,使得该财产的消费者甚至可能不知道它。这个抽象层是为什么属性被认为比字段更有价值的一个原因。

虽然一直是这种情况,但属性通常会封装私有字段,传统上属于同一类型。当使用标准语法{ get; set; }时,编译器将自动生成与属性相同类型的私有字段。这称为自动属性。例如:

public string Title { get; set;}

将由C#编译器转换为以下内容。

private string title;
public string Title
{
    get
    {
        return title;
    }
    set
    {
        title = value;
    }
}

如果您自己手动/明确定义私有字段,则该字段称为支持字段,有时也称为支持商店。你的两个例子#3和#4代表了这一点,其中#4的表现更为明显。

如前所述,并非所有属性都需要封装字段。以下是仅返回字符串文字的属性示例。

public string RandomText { get { return "Foo"; } }


现在进入你的例子:

  1. 是私有字段,private是隐式声明的,因为当没有明确声明访问修饰符时,默认值是私有的。 MSDN - Access Modifiers这不是属性,这是一个字段。 Stack Overflow - What is the difference between a field and a property?
  2. 是具有等效私有get和set的私有属性。 get和set是私有的,因为没有显式访问修饰符,它们匹配属性的修饰符。注意:获取和设置不能比属性更容易访问。意味着私有财产不能拥有公共获取或公共集合;同样的保护。 我愿意声明这个特定的语法几乎没有价值,但我相信有人可以证明我。在这种情况下,我会说只使用一个字段。
  3. 由于此示例使用#1中的字段,因此您实际上会覆盖默认自动生成字段的使用,而不是支持字段。
  4. 这与#3完全相同。 @Sebastian Hofmann所说的将被编译成相同的中间语言(IL)的是C#编译器将这两个示例转换为相同的完全字节代码。 Wikipedia - Intermediate Language
  5. <强>装订

    MSDN - Data Binding Overview

    有用的数据绑定阅读。 MSDN - Data Binding