gpt4 book ai didi

c# - 在只读字段和 getter-only 属性之间使用一种方式比另一种方式有什么好处?

转载 作者:行者123 更新时间:2023-12-04 08:48:39 24 4
gpt4 key购买 nike

虽然已经有类似的问题,但我不知道其中的使用是否对性能有更多的提升,所以我对此有疑问。
我听说可以在其类的所有构造函数中替换只读字段。但是在包括 VS 2019 在内的实际编译环境中,每个属性都可以完成,无论它们是否有两种方法或只有 getter。它们的 setter 对成功编译并不重要。
下面是关于这个问题的代码:

public class MyClass {
public readonly int value_field;
public int value_property { get; }

public MyClass(int x) {
this.value_field = x; // It's understandable
this.value_property = x; // This doesn't cause any errors.
}
}
那么,对于性能和生产力来说,什么是更好的选择?

最佳答案

首先,我认为它们的性能不会有任何差异,请看下面的代码,这就是编译器如何处理您的代码,并且似乎该属性的BackingField声明已被标记为只读,就像您为字段声明的内容一样(因为您已将您的属性声明为 getter-only 属性):

public class MyClass
{
public readonly int value_field;

[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly int <value_property>k__BackingField;

public int value_property
{
[CompilerGenerated]
get
{
return <value_property>k__BackingField;
}
}

public MyClass(int x)
{
value_field = x;
<value_property>k__BackingField = x;
}
}
其次,如果你想声明一个不能从构造函数初始化的真正的 getter-only 属性,你需要做这样的事情:
public int value_property { get { return 1; } }
最后,您可以从构造函数初始化只读值的原因是,它是 C#6 中的一项新功能,允许您创建只读属性并从构造函数初始化它们的值。 This是引用。

关于c# - 在只读字段和 getter-only 属性之间使用一种方式比另一种方式有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64181681/

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