gpt4 book ai didi

c# - 有或没有支持字段的自动属性 ​​- 偏好?

转载 作者:可可西里 更新时间:2023-11-01 08:42:37 26 4
gpt4 key购买 nike

我知道在使用自动属性时,编译器会在屏幕后面创建自己的支持字段。然而,在我阅读以学习的许多程序中,我看到人们明确地写

private int _backingField;

public int Property { get { return _backingField; } }

上面和下面有什么区别?

public int Property { get; private set; }

我知道当您在 getter 或 setter 中确实有副作用时使用该属性是显而易见的,但通常情况并非如此。另外,我知道在结构的情况下你必须明确使用支持字段,你不能通过属性访问它们的成员。

我能找到的唯一区别是调用值的方式在定义它的类内部是不同的。那么它是简单的偏好,还是有更多的东西通过它的属性或通过直接访问字段?简单约定?

最佳答案

这两个片段之间没有太大区别 - 例如,您不能通过引用传递属性,但这很少成为问题。但是,如果您希望该字段是只读的,如下所示:

private readonly int _backingField;    
public int Property { get { return _backingField; } }

然后有区别。我在上面编写的代码防止值在类中的其他地方被更改,清楚地表明这是不可变的。我真的很想能够声明一个只读字段,其中包含一个只读自动实现属性,只能在构造函数中设置 - 但目前不可用。

顺便说一句,这很令人困惑:

Also, I understand that you have to explicitly use the backing field in the case of structs, you can't access their members via properties.

什么意思?您绝对可以在结构中使用属性。您是在谈论可变结构的支持字段,即它们之间的区别:

foo.someField.X = 10;

foo.SomeProperty.X = 10;

?如果是这样,我通常会通过让我的结构不可变来避免这成为一个问题 :)

关于c# - 有或没有支持字段的自动属性 ​​- 偏好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9645938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com