C#中的自动生成属性

3
在VB.NET中,可以在类中执行以下操作。
Public Property MyProperty As String

此时,getter和setter会自动为您创建,您可以通过属性定义的变量来引用它。

Me._MyProperty = "BlahBlah"

有没有在C#中等价的机制?
2个回答

8
public string MyProperty {get; set;}

默认情况下,它们都是公共访问器,你可以像这样将其中一个设为私有:

public string MyProperty {get; private set;}

啊啊啊,谢谢...那么如何直接引用本地变量而不是通过getter和setter呢?this._MyProperty = "BlahBlah"; 似乎行不通... - Maxim Gershkovich
我认为你不能为属性的两个访问器指定可访问性修饰符。 - Rohan West
你需要参考 this.MyProperty = "BlahBlah" 本身。 - Kumar
1
@MaximGershkovich:关于基础字段,@Kumar是正确的:基础字段无法被C#代码访问(生成的标识符不是有效的C#标识符)。当然可以使用反射来访问它。 - Richard
1
@NeilN:可以指定getset中的可访问性更为严格。因此,拥有一个internalget也是允许的。(也可以有公共的set和私有的get,但这会导致与只写字段相同的混淆。) - Richard

5
在C#中,您不能直接引用自动实现属性的底层变量。

真的吗?这背后的设计原因是什么? - Maxim Gershkovich
1
@Maxim:设计原因可能是“你没有声明它,所以你不能访问它”。只需使用默认的属性访问器-直接访问字段没有性能优势。 - dthorpe
我更多地考虑的是当您无法访问变量本身时如何处理延迟加载属性,但我想这只是同样的事情。 - Maxim Gershkovich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接