【问题标题】:Set and get properties and constants differences设置和获取属性和常量差异
【发布时间】:2016-04-15 19:29:19
【问题描述】:

下面的声明有什么区别吗(除了conststatic readonly的区别)?

public static int foo1 { get; } = 8;

private static readonly int foo2 = 4;
public static int Foo2
{
    get { return foo2; }
}

private const int foo3 = 9;
public static int Foo3
{
    get { return foo3;}
}

foo1 在幕后发生了什么?和foo2foo3 一样吗?

我问foo1,因为我不能用这种语法把它变成constreadonly,所以我还问它是否真的是一个常量?

【问题讨论】:

    标签: c# syntax properties constants readonly


    【解决方案1】:

    foo2 相同。与foo3 的不同之处在于属性访问甚至不会咨询foo3 - Foo3 被编译为等效于的代码

    public static int Foo3
    {
        { get { return 9; } }
    }
    

    现在诚然,从 调用 代码的角度来看,这真的无关紧要 - 在所有情况下,您都会公开一个始终返回相同值的属性。

    如果您想要不带constFoo3,您可以使用:

    public static int Foo4 => 10;
    

    【讨论】:

    • 好吧,我已经冷静下来了,我看到C#中的const就像一个程序集标签,所以如果你想在实例化对象的时候给它赋值就不能使用它.有点奇怪,foo1 的语法不是所见即所得(与其他语言相比,C# 真的很喜欢)。
    • @kuhaku: 恐怕我真的完全没有关注你的评论……但是foo1只是一个只读的自动实现的属性,初始值为9。值不过可以在构造函数中更改。
    猜你喜欢
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多