考虑班级:
public class foo
{
public object newObject
{
get
{
return new object();
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据MSDN:
属性是提供灵活机制来读取,写入或计算私有字段值的成员.可以使用属性,就像它们是公共数据成员一样,但它们实际上是称为访问器的特殊方法.这样可以轻松访问数据
和:
属性使类能够公开获取和设置值的公共方式,同时隐藏实现或验证代码.
get属性访问器用于返回属性值,set访问器用于分配新值.这些访问者可以具有不同的访问级别.有关更多信息,请参阅Accessor辅助功能.
value关键字用于定义set indexer分配的值.
不实现set方法的属性是只读的.同时仍然提供方法的安全性和灵活性.
这是否意味着在某个时间点newObject属性的值具有对返回的新对象的引用?
编辑从属性中删除readonly
edit2也想澄清一点,这不是一个财产的最佳用途,但它试图更有效地说明问题.
Mar*_*age 10
您在每次访问属性时返回一个新对象,这不是属性的预期行为.相反,您应该每次返回相同的值(例如,存储在字段中的值).属性getter只是一个返回值的方法的美化语法.你的代码编译成这样的东西(编译器通过为属性名称添加前缀来创建一个getter,get_然后将其作为IL发出):
public class foo
{
public object get_newObject()
{
return new object();
}
}
Run Code Online (Sandbox Code Playgroud)
每次调用getter都会创建一个foo不知道或无法访问的新对象.
这是否意味着在某个时间点newObject属性的值具有对返回的新对象的引用?
没有.
使用支持字段的属性:
class Foo {
readonly Object bar = new Object();
public Object Bar { get { return this.bar; } }
}
Run Code Online (Sandbox Code Playgroud)
使用自动属性:
class Foo {
public Foo() {
Bar = new Object();
}
public Object Bar { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
使用与公共字段相同的简单语法访问属性.但是,通过使用属性,您可以向getter和setter添加代码,允许您执行getter中的延迟加载或setter中的验证(以及更多)等内容.
| 归档时间: |
|
| 查看次数: |
1181 次 |
| 最近记录: |