【发布时间】:2018-08-05 00:21:32
【问题描述】:
在 C# 中,与原始类型一起使用的属性看起来相当简单。例如,在一个整数上,具有以下属性:
private int _foo = 9;
public int Foo
{
get
{
return _foo;
}
set
{
_foo = value;
}
}
很容易发现,当用户键入时,例如,int bar = Foo 将返回 _foo 的值,并将其分配给变量 bar。同样,Foo = 10,支持字段 _foo 的值更改为 10。但是,当对象(不是指 c# 的 object 关键字)存储在可以具有方法的属性中时,这变得更加复杂。例如:
public class Sample
{
private int NoGoodName
public Sample() {}
public void Method1()
{
NoGoodName *= 2;
}
}
public Sample TestSample {get; set;}
如果用户调用,比如说,TestSample.Method1(),究竟会发生什么?它会调用getter,然后在返回值上调用Method1,还是先调用Method1(),然后将TestSample设置为结果?
【问题讨论】:
-
当属性不是值类型并且是引用类型(对象)时,属性返回对该对象的引用,然后在该引用所引用的对象上调用该方法。把它想象成一根绳子,一端系在物体上,另一端可以绕过去(或者你可以有很多绳子,但它们都系在同一个物体上)。因此,当您访问该属性时,绳索会传递给您,现在您可以通过绳索与对象进行通信(调用方法)。
标签: c# oop properties