2016-04-27 64 views
-2

我知道读写属性之间的差异,C#我如何知道何时做一个属性读写,而不是只读

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

简而言之,我的问题是 - 当你申请获取并设置访问权限时,你问自己关于你正在编写的属性的问题?

我的下一个问题是,如果你不提供对该属性的设置访问权,它究竟如何定义?

谢谢堆,如果你帮我。

+0

二传手让你用这个属性做什么?如果您希望能够这样做,请编写setter:通过赋值来设置属性。 – Amy

回答

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是如何设置的,这样就可以不将其设置为负数。该类提供了允许更改其状态的方法,但是它使得该更改确定允许进行哪些更改。

在某些情况下,您可能希望某个属性或整个类是不可变的(不可更改),以便创建该类时确定的任何值都不会更改。

+0

感谢您花时间解释这一点。 –

+0

其实真的很好的例子 –

+0

我的荣幸。如果是答案,请不要忘记标记为答案。 –

0

你问自己你正在写的房产 什么问题,当你申请获得并设置访问权限?

简单的说就是你是否允许你的类的用户特定财产改变类已经被创建之后。他们所做的事情完全取决于班级。

我的下一个问题是,如果你不提供一个设置访问属性, 它究竟是如何定义的?

  1. 它可以通过构造函数来设置。它可能是一个参数,将 传递给构造函数,因此可以使用一些硬编码值来提供 。
  2. 一些属性可以被延迟实例化。想象一下,你有两个名为FistName和LastName的属性。您有一个名为FullName的最终属性 ,它定义为:

    result = this.FirstName +“”+ this.LastName;

希望这可以让你开始在这个。如果您想更深入地研究,请查看[输入链接描述] SOLID 1,您随时可以通过Google了解有关属性的更多信息。

+0

嗨TheEdge,谢谢。您提到“您班级的用户”只是想要说明我的班级的用户是谁?工程师协助编写我的代码或我的应用程序的用户?你还提到“在课程创建后改变这个特定的属性”。我在这方面的问题是 –

+0

偶然发送没有完成以前的评论。在我的应用程序正式运行后,课程创建后意味着什么?再次感谢。 –

+0

你的班级的用户=任何人可以在代码中访问你的班级。这是任何人使用你的班级。因为我不知道这个班是否在与其他人共享的集会中,所以可以通过Web API访问的通用代码我不能更明确。 – TheEdge

相关问题