我想问一下:
1、在什么情况下要将属性定义为可读可写的?
2、在什么情况下将属性定义为只可读的?
3、在什么情况将属性定义为只可写的?
这个问题一直不是很明白,麻烦各位在解答的时候能够说的详细一点。

解决方案 »

  1.   

    举几个例子,这些例子并不是告诉你只读、只写属性的所有运用场合,只是给你一些启发:
    比如说,有几个属性,它们彼此相关,典型的我们定义这样一个类class Address
    {
        public Address(string country, string province, string city)
        {
            Country = country; Province = province; City = city;
        }
        public string Country { get; private set; }
        public string Province { get; private set; }
        public string City { get; private set; }
    }我们只允许通过构造函数一次性设置国家、省、市三个字段,而不允许分别设置。这样做的好处在于,保持任何时候一个地址对象永远是有效的。
    假设不这么做,而是允许分别设置,那么这个对象就存在程序只更新了国家字段,在更新省、城市的时候因为某种原因没有更新完成,而导致出现一个无效的状态,比如中国华盛顿州洛杉矶市;或者中国安徽省济南市这种因为只更新了部分字段而造成的无效状态。
    在.NET类库中,Font、DateTime都使用了类似的技巧避免数据不完整的问题。至于只写属性,这个比较罕见,比如说当我们访问一个不能随机读写的存储设备,我们可以通过只写属性改变它的存储,而在内部通过命令重排优化其写入的过程,因为在写入前,它的状态是随机的,所以读取它没有什么意义。因为只写属性只在很少的场合使用,所以除非你知道你这么做的目的,否则不要滥用它。当你定义一个只写属性,会收到一个编译器警告。http://msdn.microsoft.com/zh-cn/library/vstudio/ms182165.aspx