我知道属性中读取和写入之间的区别,
据我所知,你只能读取只读属性(仅使用getter),但是当涉及到write关键字(setter)时,我如何知道应用它的属性?
简单地说,我的问题是 - 当你申请获取和设置访问权限时,你对自己所写的财产有什么问题?
我的下一个问题是,如果您没有提供对该物业的固定访问权限,它究竟是如何定义的?
如果你帮助我,谢谢你。
答案 0 :(得分:2)
只读属性是由类确定的,类之外的任何内容都不能更改。例如,考虑List<string>
。它有Count
属性。能够做到这一点是没有意义的:
var list = new List<string>();
list.Count = 5;
什么设置了只读属性?将项目添加到列表或从列表中删除时,其值会更改。这就是一个例子,其中一个属性反映了一个类的一些内部状态。另一个例子是StopWatch
类。您无法设置ElapsedMilliseconds
的值。该属性取决于自时钟开始以来经过了多长时间。
这是另一个例子。
public class Price
{
public decimal Amount {get; private set;}
public Price(decimal amount)
{
if(amount < 0) throw new ArgumentOutOfRangeException("amount",
"amount must be greater than zero.");
Amount = amount;
}
public Void Discount(decimal discountAmount)
{
if(discountAmount >= amount)
amount = 0
else
amount -= discountAmount;
}
}
Amount
是只读的。设置Amount
有两种方法。一种是在创建类时,通过将一个数量传递给构造函数。
var myPrice = new Price(5);
另一种方法是调用Discount
方法。
myPrice.Discount(3);
在这两种情况下,该类都会控制Amount
的设置方式,以便您无法将其设置为负数。该类提供了允许更改其状态的方法,但它使更改确定了允许的更改。
在某些情况下,您可能希望属性或整个类是不可变的(不可更改),以便在创建类时确定的任何值都不会更改。
答案 1 :(得分:0)
您对自己撰写的财产有何疑问? 当你申请获取并设置访问权限时?
简单地说,是否要允许您的类的用户在创建类之后更改该特定属性。当他们这样做时会发生什么完全取决于班级。
我的下一个问题是,如果您没有提供对该物业的固定访问权限, 它究竟是如何定义的?
某些属性可以延迟实例化。想象一下,您的类上有两个属性,名为FistName和LastName。你有一个 最终属性名为FullName,其定义为:
result = this.FirstName +&#34; &#34; + this.LastName;
希望这可以让你开始这个。如果您想深入研究,请查看[在此处输入链接说明] SOLID 1,您可以随时使用Google获取有关属性的更多信息。