首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# 6中的只读与私有getter专用属性

C# 6中的只读与私有getter专用属性
EN

Software Engineering用户
提问于 2018-06-12 13:57:53
回答 2查看 14.9K关注 0票数 14

C# 6增加了自动属性初始化器,所以我们可以

代码语言:javascript
复制
private List<LinearLayout> layouts1 { get; } = new List<LinearLayout>();

这比

代码语言:javascript
复制
private readonly List<LinearLayout> layouts2 = new List<LinearLayout>();

(注:这与2011年的问题.NET属性-使用专用集还是ReadOnly属性?有关,但这包括一个公共采摘者和一个私人策划人。这里我只有一个私人的吸气者。)

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2018-06-13 07:45:03

如果你看看这里,您将看到以下代码:

代码语言:javascript
复制
class Example
{
   private List<LinearLayout> layouts1 { get; } = new List<LinearLayout>();
}

编译器将其降级为:

代码语言:javascript
复制
internal class Example
{
    private readonly List<LinearLayout> <layouts1>k__BackingField = new List<LinearLayout>();

    private List<LinearLayout> layouts1
    {
        get
        {
            return <layouts1>k__BackingField;
        }
    }
}

而该属性将进一步降低到get_layouts1()方法

换句话说,自动属性初始化器是纯语法糖.它们提供了一种使用自动属性的方法,同时仍然允许初始化支持字段.

所以从易变的角度来看,他们之间根本没有区别。两者都提供对创建类实例时初始化的列表的只读访问。

它可能会造成轻微的性能开销,因为必须调用该方法才能获得列表引用,但很可能CLR将优化该方法并直接访问该字段。

私有属性最明显的用途是延迟加载/延迟执行。。还有其他用途,但作为指导方针,它们往往是毫无意义的“噪音”。我不会说使用私有财产比仅仅使用字段更糟糕,但我建议在大多数情况下只使用只读字段。

票数 18
EN

Software Engineering用户

发布于 2018-06-12 14:29:20

在这种情况下,它们的功能几乎相同。有一种微妙之处会使私人财产不那么理想:

  • 字节码将通过getter函数访问List<LinearLayout>。但是,只要字节码为您的环境重新编译( C#已经做了很长时间),getter函数就会被优化,所以不是真正的问题。

如果它们的使用方式相同,就不会有任何实际差别。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/372462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档