在C#中微软为了减轻程序员的工作,投入了相当大的技术支持。其中属性的提出就节省了工程师的很多工作。
属性的定义不但减轻了工作的员工的工作量,还给程序员提供了一个较为灵活的控制方式。如:
                private string normal;

                public string Normal
                {
                        get { return normal; }
                        set { normal = value; }
                }
这是正常的属性定义,在上边的代码中我们可以做一点小小手脚就会将字段的控制和应用变的更为灵活。
                private string writeOnly;
                /// <summary>
                /// 只写属性
                /// </summary>
                public string WriteOnly
                {
                        //在gat前加上关键字private,这个属性就会变成只写
                        //其实这只是一个非对称访问器,一个只写的属性是没有set访问器的
                        private get { return writeOnly; }
                        set { writeOnly = value; }
                }
同样我们可以定义只读的属性。当然这些都是有现实意义的,只读的可以用来定义不变的数据。那么只写的属性又有什么用处呢?
下边我举个例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test
{
        class WriteOnlyAttribute
        {
                private string normal;
                public string Normal
                {
                        get { return normal; }
                        set { normal = value; }
                }

                private string writeOnly;
                /// <summary>
                /// 只写属性
                /// </summary>
                public string WriteOnly
                {
                        //在gat前加上关键字private,这个属性就会变成只写
                        //其实这只是一个非对称访问器,一个只写的属性是没有get访问器的
                        private get { return writeOnly; }
                        set { writeOnly = value; }
                }
                //在WriteOnly所在的类中我们可以对它经行操作
                public void UseWriteOnly()
                {
                        Console.WriteLine("在这个方法中我们可以对只写属性的字段操作\t" + this.WriteOnly);
                }

        }
        class Program
        {
                static void Main()
                {
                        WriteOnlyAttribute woa = new WriteOnlyAttribute();
                        //对WriteOnlyAttribute的只写属性赋值
                        woa.WriteOnly = "WriteOnly字段";
                        //调用WriteOnlyAttribute的UseWriteOnly()方法,使用只写属性
                        woa.UseWriteOnly();
                        Console.ReadLine();
                }
        }
}
这样一来我们定义的只写属性就有一定的意义了。如果我们做的是保密性很强的核心代码,为了保护代码的保密性和安全性这就显的比较重要了。我们只要给出只写的属性让调用方赋值。我们会在自己的核心代码中提供方法,返回用户想要得到的数据。从这个角度看就等同于一个方法的参数。但是其蕴涵的面向对象的意义是不能也不可以被方法掩盖的。
 
再有就是在属性中对数据经行数据的安全验证和异常处理,这样就从最底层保证了数据的正确性。如要求用户输入一个点好号码:
    //手机
                private string mobile;
                public string Mobile
                {
                        get { return mobile; }
                        set
                        {
                                //在对属性Mobile赋值的时候对数据经行安全验证
                                if (Regex.IsMatch(value, @"^[1]+[3,5]+\d{9}"))
                                {
                                        mobile = value;
                                }
                                else
                                {
                                        throw new MyException("输入的手机号码不对!");
                                }
                        }
                }
属性的应用还有一种,也是很“邪恶”的一种。应为用的很少就不给大家提供代码了。就是在属性的get和set中直接跟一个可以直接赋值的语句。是不是很“邪恶”?