繁体   English   中英

C# 6.0 中的只读属性

[英]Read-Only Property in C# 6.0

Microsoft 在 C#6 中引入了一种新语法,可让您将属性设置为只读,如下所示:

public class Animal
{
    public string MostDangerous { get; } = "Mosquito";
}

我想知道这种方法的附加价值是什么。

只写有什么区别:

public class Animal
{
    public const string MostDangerous = "Mosquito";
}

甚至:

public class Animal
{
    public string MostDangerous 
    { 
        get
        {
            return "Mosquito";
        }
    }
}

您的示例使用的是无法显示所有可能性的字符串常量。 看看这个片段:

class Foo
{
    public DateTime Created { get; } = DateTime.Now;  // construction timestamp

    public int X { get; } 

    public Foo(int n)
    {
        X = n;  // writeable in constructor only
    }
}

只读属性是针对每个实例的,可以从构造函数中设置。 与必须在编译时确定值的const字段非常不同。 属性初始化器是一个单独的特性,遵循字段初始化器的规则和限制。

较新的语法旨在减少 C# 的冗长性。 这只是语法糖。 生成的 IL 类似于带有 getter 和后备存储的 auto 属性。

这种对 C# 的改进直接来自 VB,并且不需要实现支持字段和构造函数初始值设定项:

Public ReadOnly dateStamp As DateTime = Datetime.Now

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM