2016-12-09 107 views
1

我使用C#6.0中创建像一类的getter和属性的setter方法:C#6 getter和setter

private int _id { get; set; } 

public int Id => _id; 

但是编译器说:

属性或索引“ID”不能徽记 - 我怎样才能解决这个不创建getter和setter方法就像是只读

private int _id { get; set; } 

public int Id 
{ 
    get { return this._id; } 
    set { this._id = value; } 
} 
+0

@ Dr.Fre,这是编译器的功能,而不是框架版本的基础 – Fabio

+2

作为一项规则,有这样的事情,如果你发现自己疯狂地猜测并随意使用语言特征,那么你应该回头重新模仿由熟悉语言的人编写的代码。 –

回答

6

只有=>的简写语法构造一个只读属性。

private int _id; 
public int Id => _id; 

这相当于它是只读的自动属性:

public int Id { get; } 

如果你想你的财产既设定和gettable,但公开只是gettable,然后定义私人二传手:

public int Id { get; private set; } 

这样你就不需要任何私人领域。

2

随着

private int _id { get; set; } 

要创建一个属性_id有一个getter和一个setter。

随着

public int Id => _id; 

你正在创建一个只有getter和返回的财产_id

我想你混淆如何利用自动属性的值的属性Id,因为这

private int _id { get; set; } 

public int Id 
{ 
    get { return this._id; } 
    set { this._id = value; } 
} 

创建两个属性:_id与自动生成的getter/setter和Id与明确的getter/setter,只是调用相应的获取/设置器_id

没有自动属性功能,你必须这样写:

private int _id; 

public int Id 
{ 
    get { return this._id; } 
    set { this._id = value; } 
} 

这里,_id是一个领域,Id是一个属性。

1

这是最新的语法,如果你想保持私人领域:

public int Id 
{ 
    get => _id; 
    set => _id = value; 
} 
private int _id; 
+0

这是一个C#> = 7.0的语法,但不错的贡献! – Lucas