首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只有getter的自动属性,可以设置,为什么?

只有getter的自动属性,可以设置,为什么?
EN

Stack Overflow用户
提问于 2016-01-12 20:20:14
回答 3查看 44.8K关注 0票数 102

我创建了一个自动属性:

代码语言:javascript
运行
复制
public int Foo { get; } 

这是唯一的getter。但是当我构建一个构造函数时,我可以改变这个值:

代码语言:javascript
运行
复制
public MyClass(string name)
{
    Foo = 5;
}

为什么这是可能的,即使这是get-only?

EN

回答 3

Stack Overflow用户

发布于 2016-01-12 20:21:51

这是a new feature in C#6,它允许您创建只读属性并从构造函数初始化它们的值(或在声明它们时内联)。

如果您试图在构造函数之外更改此属性的值,将会出现编译错误。

它是只读的,因为一旦初始化了它的值(内联或在构造函数内部),就不能更改它的值。

票数 26
EN

Stack Overflow用户

发布于 2016-01-12 20:25:13

如果无法从构造函数(或自动属性初始值设定项)初始化只读属性,则它将毫无用处,因为它将始终返回其类型的默认值(0表示数字,null表示引用类型)。相同的语义适用于所有C#版本中的readonly字段。

要定义真正的getter属性(不能从构造函数初始化),您需要指定它作为定义的一部分返回的内容:

代码语言:javascript
运行
复制
public int Foo { get { return 5; } }

或者,在C# 6中更简洁:

代码语言:javascript
运行
复制
public int Foo => 5;
票数 17
EN

Stack Overflow用户

发布于 2016-01-13 06:25:30

声明为readonly的变量可以在构造函数中编写,但在支持该属性的语言中,不能在构造函数返回后进行修改。该限定符是作为一种语言功能提供的,因为它通常对于值随构造函数参数变化的字段是必需的(这意味着它们不能在构造函数开始之前初始化),但在构造函数返回后不必更改,但它仅适用于公开为字段的变量。在许多情况下,readonly-qualified字段的语义对于公共成员来说是完美的,只是类将成员--甚至是不可变的成员--公开为属性而不是字段通常更好。

就像读写自动属性允许类像普通字段一样容易地公开可变属性一样,只读自动属性允许类像readonly-qualified字段一样容易地公开不可变属性。正如可以在构造函数中编写readonly-qualified字段一样,get-only属性也是如此。

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

https://stackoverflow.com/questions/34743533

复制
相关文章

相似问题

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