C# 6增加了自动属性初始化器,所以我们可以
private List<LinearLayout> layouts1 { get; } = new List<LinearLayout>();这比
private readonly List<LinearLayout> layouts2 = new List<LinearLayout>();(注:这与2011年的问题.NET属性-使用专用集还是ReadOnly属性?有关,但这包括一个公共采摘者和一个私人策划人。这里我只有一个私人的吸气者。)
发布于 2018-06-13 07:45:03
如果你看看这里,您将看到以下代码:
class Example
{
private List<LinearLayout> layouts1 { get; } = new List<LinearLayout>();
}编译器将其降级为:
internal class Example
{
private readonly List<LinearLayout> <layouts1>k__BackingField = new List<LinearLayout>();
private List<LinearLayout> layouts1
{
get
{
return <layouts1>k__BackingField;
}
}
}换句话说,自动属性初始化器是纯语法糖.它们提供了一种使用自动属性的方法,同时仍然允许初始化支持字段.
所以从易变的角度来看,他们之间根本没有区别。两者都提供对创建类实例时初始化的列表的只读访问。
它可能会造成轻微的性能开销,因为必须调用该方法才能获得列表引用,但很可能CLR将优化该方法并直接访问该字段。
私有属性最明显的用途是延迟加载/延迟执行。。还有其他用途,但作为指导方针,它们往往是毫无意义的“噪音”。我不会说使用私有财产比仅仅使用字段更糟糕,但我建议在大多数情况下只使用只读字段。
发布于 2018-06-12 14:29:20
在这种情况下,它们的功能几乎相同。有一种微妙之处会使私人财产不那么理想:
List<LinearLayout>。但是,只要字节码为您的环境重新编译( C#已经做了很长时间),getter函数就会被优化,所以不是真正的问题。如果它们的使用方式相同,就不会有任何实际差别。
https://softwareengineering.stackexchange.com/questions/372462
复制相似问题