C#如何知道何时使属性读写,而不仅仅是只读

时间:2016-04-27 23:35:28

标签: c# properties get set

我知道属性中读取和写入之间的区别,

据我所知,你只能读取只读属性(仅使用getter),但是当涉及到write关键字(setter)时,我如何知道应用它的属性?

简单地说,我的问题是 - 当你申请获取和设置访问权限时,你对自己所写的财产有什么问题?

我的下一个问题是,如果您没有提供对该物业的固定访问权限,它究竟是如何定义的?

如果你帮助我,谢谢你。

2 个答案:

答案 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)

  

您对自己撰写的财产有何疑问?   当你申请获取并设置访问权限时?

简单地说,是否要允许您的类的用户在创建类之后更改该特定属性。当他们这样做时会发生什么完全取决于班级。

  

我的下一个问题是,如果您没有提供对该物业的固定访问权限,   它究竟是如何定义的?

  1. 可以通过构造函数设置。它可能是一个参数 传递给构造函数,所以你要做一些硬编码的值 可用。
  2. 某些属性可以延迟实例化。想象一下,您的类上有两个属性,名为FistName和LastName。你有一个 最终属性名为FullName,其定义为:

    result = this.FirstName +&#34; &#34; + this.LastName;

  3. 希望这可以让你开始这个。如果您想深入研究,请查看[在此处输入链接说明] SOLID 1,您可以随时使用Google获取有关属性的更多信息。