属性

    上节课我把属性形容成是一个进入房间的窗户或通道,关闭着的房间就是封装好的类,那么属性用代码要如何解释呢?其实这个问题,在我刚学习属性时也是很不理解,如果需要对字段的值进行判断,就写我上面的两段代码(17-38行)不就可以了吗?但是随着我们学习的不断深入,属性是必须掌握的一个知识点,现在同学们只需要会定义属性,同时会访问属性就可以了,日后深入学习(如windowsform)时,我们就理解属性的用法和好处了。在我们这个例子中属性机制就要做到如同守门员一样,限制住非海、陆、空的三种军种,下面把按照刚才军种的例子我来单独写一段代码,同时使用属性,在看代码前,我们先来看一下如何定义一个属性,它的基本语法是:  
     ptype  pname
{
    get{//取字段数据程序代码}
    set{//设定字段数据程序代码}
}
     其中ptype为属性类型,pname为属性的名称,set和get的相关程序代码可以让我们设置私有字段的访问控制,set会接受外部传入的值,并自动地以名称为value的变量存储这个值。因此在set程序区块,你必须将value这个变量指定给对应的字段,这相对地也提供了一个缓冲的空间,让我们能够在区块内编写适当的程序代码,避免不适当的字段值设定操作,比如我上一篇的例子“男性”不是军种的一种,我们在调用军种这个字段时,赋值除了海陆空三种值后,要出现报错的提示,只有对特殊字段做出限制时,你编写的程序才更加合理。在get程序区快中,必须使用return关键字,将其对应的字段值返回给引用此属性的程序代码,同样我们也可以将运算程序代码写在这个区块中,以判断是否返回指定的字段值。比如:在网站中每个人注册的都是真实的年龄中定义的,我们可以做一个假象,让所以人的年龄在显示的时候都比实际年龄大3岁,这就通过get区块中return出虚假的年龄。下面我们来看一段声明属性的代码:
定义年龄属性
(教学思路 C#之类二)类成员:属性_休闲 1 class Ren
(教学思路 C#之类二)类成员:属性_休闲 2        {
(教学思路 C#之类二)类成员:属性_休闲 3                //先定义一个私有变量实际年龄age
(教学思路 C#之类二)类成员:属性_休闲 4                int age = 10;
(教学思路 C#之类二)类成员:属性_休闲 5
(教学思路 C#之类二)类成员:属性_休闲 6                //再定义一个属性,
(教学思路 C#之类二)类成员:属性_休闲 7                public int Age
(教学思路 C#之类二)类成员:属性_休闲 8                {
(教学思路 C#之类二)类成员:属性_休闲 9                        //输出时的年龄比实际年龄age大三岁,即输出的是10+3岁
(教学思路 C#之类二)类成员:属性_休闲10                        get { return age + 3; }
(教学思路 C#之类二)类成员:属性_休闲11                        //给年龄赋值时,先判断年龄的范围
(教学思路 C#之类二)类成员:属性_休闲12                        set    
(教学思路 C#之类二)类成员:属性_休闲13                        {
(教学思路 C#之类二)类成员:属性_休闲14                                //如果年龄小于1岁或是大于120岁时,不允许赋值,提示错误。
(教学思路 C#之类二)类成员:属性_休闲15                                if (value < 1 || value > 120)
(教学思路 C#之类二)类成员:属性_休闲16                                        Console.WriteLine("您输入的年龄有误");
(教学思路 C#之类二)类成员:属性_休闲17                                 //如果年龄符合范围,允许赋值,赋完值后的age即是value你赋的值。
(教学思路 C#之类二)类成员:属性_休闲18                                else
(教学思路 C#之类二)类成员:属性_休闲19                                        age = value;
(教学思路 C#之类二)类成员:属性_休闲20                        
(教学思路 C#之类二)类成员:属性_休闲21                        }
(教学思路 C#之类二)类成员:属性_休闲22                }
      上面的实例就是一个属性的构造过程和方法,我在get和set访问器中都加入了条件,并且是我手动书写的,VS给我们提供了一个自动封装字段的方法,下面我们来按照我说的步骤来试一下,在类中定义一个字段 string a="我是A"; 接着把鼠标停放到a处,点击右键“重构”--“封装字段”,VS会自动的封装a字段,并且取名为A,你也可以更改属性的名字,点击确定,a字段的A属性就封装好了,封装后的代码为:
       string a = "我是A";
        public string A
        {
            get { return a; }
            set { a = value; }
        }
      通常我们都习惯叫get访问器和set访问器,如果我们想得到类中的属性值时,用到的是get访问器return返回出值,如果我们想给属性赋值的时候,就会用到set访问器,属性有4种形式:分别是可读可写属性,既有get也有set访问器;如果只有get访问器,这个属性是只读的,无法赋值;如果只有set访问器,这个属性就只能被赋值,不能读取,以后我们要学习界面设计时,所有的控件都有很多的属性,这些属性就都是只写的,并且有一定的赋值要求,比如在网页上画一个表格,我们设置表格的边框颜色,就使用到边框颜色的属性,如果我们赋的颜色值不符合规范,就会出现错误提示;还有一种属性是加入了static关键字的静态属性,静态属性只能封装静态数据,比如:string static a = "我是静态A";
        public  static string A
        {
            get { return a; }
            set { a = value; }
        }
       下面我们把上面的例子继续深化,声明一个对象boby,我们来具体看一下如果利用属性的读写功能:
属性的用法
(教学思路 C#之类二)类成员:属性_休闲 1     class Ren
(教学思路 C#之类二)类成员:属性_休闲 2        {
(教学思路 C#之类二)类成员:属性_休闲 3                //先定义一个私有变量实际年龄age
(教学思路 C#之类二)类成员:属性_休闲 4                int age = 10;
(教学思路 C#之类二)类成员:属性_休闲 5
(教学思路 C#之类二)类成员:属性_休闲 6                //再定义一个属性,
(教学思路 C#之类二)类成员:属性_休闲 7                public int Age
(教学思路 C#之类二)类成员:属性_休闲 8                {
(教学思路 C#之类二)类成员:属性_休闲 9                        //输出时的年龄比实际年龄age大三岁,即输出的是10+3岁
(教学思路 C#之类二)类成员:属性_休闲10                        get { return age + 3; }
(教学思路 C#之类二)类成员:属性_休闲11                        //给年龄赋值时,先判断年龄的范围
(教学思路 C#之类二)类成员:属性_休闲12                        set    
(教学思路 C#之类二)类成员:属性_休闲13                        {
(教学思路 C#之类二)类成员:属性_休闲14                                //如果年龄小于1岁或是大于120岁时,不允许赋值,提示错误。
(教学思路 C#之类二)类成员:属性_休闲15                                if (value < 1 || value > 120)
(教学思路 C#之类二)类成员:属性_休闲16                                        Console.WriteLine("您输入的年龄有误");
(教学思路 C#之类二)类成员:属性_休闲17                                 //如果年龄符合范围,允许赋值,赋完值后的age即是value你赋的值。
(教学思路 C#之类二)类成员:属性_休闲18                                else
(教学思路 C#之类二)类成员:属性_休闲19                                        age = value;
(教学思路 C#之类二)类成员:属性_休闲20                        
(教学思路 C#之类二)类成员:属性_休闲21                        }
(教学思路 C#之类二)类成员:属性_休闲22                }
(教学思路 C#之类二)类成员:属性_休闲23                //定义一个得到真实年龄的方法
(教学思路 C#之类二)类成员:属性_休闲24                public void realage()
(教学思路 C#之类二)类成员:属性_休闲25                {
(教学思路 C#之类二)类成员:属性_休闲26                        Console.WriteLine("真实年龄为" + age + "岁");
(教学思路 C#之类二)类成员:属性_休闲27                }
(教学思路 C#之类二)类成员:属性_休闲28        }
(教学思路 C#之类二)类成员:属性_休闲29        class Program
(教学思路 C#之类二)类成员:属性_休闲30        {
(教学思路 C#之类二)类成员:属性_休闲31
(教学思路 C#之类二)类成员:属性_休闲32                static void Main(string[] args)
(教学思路 C#之类二)类成员:属性_休闲33                {
(教学思路 C#之类二)类成员:属性_休闲34                        //实例化一个人Ren类aboy孩子对象
(教学思路 C#之类二)类成员:属性_休闲35                        Ren aboy = new Ren();
(教学思路 C#之类二)类成员:属性_休闲36                        
(教学思路 C#之类二)类成员:属性_休闲37                        //此时打印出的是,未通过属性直接用到的age初值,也就是真实年龄。
(教学思路 C#之类二)类成员:属性_休闲38                        aboy.realage();
(教学思路 C#之类二)类成员:属性_休闲39                        Console.WriteLine();
(教学思路 C#之类二)类成员:属性_休闲40
(教学思路 C#之类二)类成员:属性_休闲41                        //现在我们直接取得孩子的年龄,因为age是私有变量,我们必须通过属性Age得到,值为虚假的大三岁的年龄
(教学思路 C#之类二)类成员:属性_休闲42                        Console.WriteLine("通过属性得到的年龄为:"+aboy .Age);
(教学思路 C#之类二)类成员:属性_休闲43                        Console.WriteLine();
(教学思路 C#之类二)类成员:属性_休闲44
(教学思路 C#之类二)类成员:属性_休闲45                        //现在我们给孩子的年龄赋一个0岁的值,因为age是私有变量,同样赋值也是通过属性Age,
(教学思路 C#之类二)类成员:属性_休闲46                        //此时由于年龄范围的限制,是会报错的。
(教学思路 C#之类二)类成员:属性_休闲47                        aboy.Age = 0;
(教学思路 C#之类二)类成员:属性_休闲48
(教学思路 C#之类二)类成员:属性_休闲49                        //我们再给孩子的年龄赋一个12岁,因为age是私有变量,同样赋值也是通过属性Age
(教学思路 C#之类二)类成员:属性_休闲50                        aboy.Age = 12;
(教学思路 C#之类二)类成员:属性_休闲51                        Console.WriteLine();
(教学思路 C#之类二)类成员:属性_休闲52
(教学思路 C#之类二)类成员:属性_休闲53                        //此时因为年龄的范围合法,原来的age=10,便被替换成了12。
(教学思路 C#之类二)类成员:属性_休闲54                        //我们再来打印孩子的真实年龄
(教学思路 C#之类二)类成员:属性_休闲55                        aboy.realage();
(教学思路 C#之类二)类成员:属性_休闲56                        Console.WriteLine();
(教学思路 C#之类二)类成员:属性_休闲57                        //我们再来打印一下age改为12后的虚假年龄Age
(教学思路 C#之类二)类成员:属性_休闲58                        Console.WriteLine("通过属性得到的年龄为:" + aboy.Age);
(教学思路 C#之类二)类成员:属性_休闲59                        Console.WriteLine();
(教学思路 C#之类二)类成员:属性_休闲60
(教学思路 C#之类二)类成员:属性_休闲61                }
(教学思路 C#之类二)类成员:属性_休闲62        }
 我们来看一下运行的结果:
 
真实年龄为10岁
通过属性得到的年龄为:13
您输入的年龄有误
真实年龄为12岁
通过属性得到的年龄为:15
   通过这个实例相信大家已经了解了属性的用法,下面我们把我上节课有关军种的实例做一下改动,同学们再来体会一下属性的用法:
 
 
优化军种属性
(教学思路 C#之类二)类成员:属性_休闲 1class Armyman
(教学思路 C#之类二)类成员:属性_休闲 2        {
(教学思路 C#之类二)类成员:属性_休闲 3                //public string Armytype = "";
(教学思路 C#之类二)类成员:属性_休闲 4                //public void ArmyFunction()
(教学思路 C#之类二)类成员:属性_休闲 5                //{
(教学思路 C#之类二)类成员:属性_休闲 6                //        switch (Armytype)
(教学思路 C#之类二)类成员:属性_休闲 7                //        {
(教学思路 C#之类二)类成员:属性_休闲 8                //                case "陆军":
(教学思路 C#之类二)类成员:属性_休闲 9                //                        Console.WriteLine("现代陆军都是大规模的机械化部队,拥有大量的重装备和后勤补给。");
(教学思路 C#之类二)类成员:属性_休闲10                //                        break;
(教学思路 C#之类二)类成员:属性_休闲11                //                case "海军":
(教学思路 C#之类二)类成员:属性_休闲12                //                        Console.WriteLine("杜鲁门曾说过:海军到哪里,国家的权利就到哪里 .");
(教学思路 C#之类二)类成员:属性_休闲13                //                        break;
(教学思路 C#之类二)类成员:属性_休闲14                //                case "空军":
(教学思路 C#之类二)类成员:属性_休闲15                //                        Console.WriteLine("战略空军将使战争形态向可控战争转变。");
(教学思路 C#之类二)类成员:属性_休闲16                //                        break;
(教学思路 C#之类二)类成员:属性_休闲17                //                default:
(教学思路 C#之类二)类成员:属性_休闲18                //                        Console.WriteLine("{0}不是兵种,请输入现代战争中的三大兵种!海军、陆军、空军", Armytype);
(教学思路 C#之类二)类成员:属性_休闲19                //                        break;
(教学思路 C#之类二)类成员:属性_休闲20                //        }
(教学思路 C#之类二)类成员:属性_休闲21                //}
(教学思路 C#之类二)类成员:属性_休闲22                //下面的代码实现了和上面一下的功能,先定义一个私有的字段Armytype,再定义一个属性
(教学思路 C#之类二)类成员:属性_休闲23                        string Armytype = "";
(教学思路 C#之类二)类成员:属性_休闲24                         public string Armytype1
(教学思路 C#之类二)类成员:属性_休闲25                        {
(教学思路 C#之类二)类成员:属性_休闲26                                get {
(教学思路 C#之类二)类成员:属性_休闲27                                        return Armytype;
(教学思路 C#之类二)类成员:属性_休闲28
(教学思路 C#之类二)类成员:属性_休闲29                                }
(教学思路 C#之类二)类成员:属性_休闲30                                set
(教学思路 C#之类二)类成员:属性_休闲31                                {
(教学思路 C#之类二)类成员:属性_休闲32                                        switch (value)
(教学思路 C#之类二)类成员:属性_休闲33                                        {
(教学思路 C#之类二)类成员:属性_休闲34                                                case "陆军":
(教学思路 C#之类二)类成员:属性_休闲35                                                        Console.WriteLine("现代陆军都是大规模的机械化部队,拥有大量的重装备和后勤补给。");
(教学思路 C#之类二)类成员:属性_休闲36                                                        Armytype = value;
(教学思路 C#之类二)类成员:属性_休闲37                                                        break;
(教学思路 C#之类二)类成员:属性_休闲38                                                case "海军":
(教学思路 C#之类二)类成员:属性_休闲39                                                        Console.WriteLine("杜鲁门曾说过:海军到哪里,国家的权利就到哪里 .");
(教学思路 C#之类二)类成员:属性_休闲40                                                        Armytype = value;
(教学思路 C#之类二)类成员:属性_休闲41                                                        break;
(教学思路 C#之类二)类成员:属性_休闲42                                                case "空军":
(教学思路 C#之类二)类成员:属性_休闲43                                                        Console.WriteLine("战略空军将使战争形态向可控战争转变。");
(教学思路 C#之类二)类成员:属性_休闲44                                                        Armytype = value;
(教学思路 C#之类二)类成员:属性_休闲45                                                        break;
(教学思路 C#之类二)类成员:属性_休闲46                                                default:
(教学思路 C#之类二)类成员:属性_休闲47                                                        Console.WriteLine("{0}不是兵种,请输入现代战争中的三大兵种!海军、陆军、空军", Armytype);
(教学思路 C#之类二)类成员:属性_休闲48                                                        break;
(教学思路 C#之类二)类成员:属性_休闲49                                        }
(教学思路 C#之类二)类成员:属性_休闲50                                }
(教学思路 C#之类二)类成员:属性_休闲51                        }
(教学思路 C#之类二)类成员:属性_休闲52
(教学思路 C#之类二)类成员:属性_休闲53                }
(教学思路 C#之类二)类成员:属性_休闲54        class Program
(教学思路 C#之类二)类成员:属性_休闲55        {
(教学思路 C#之类二)类成员:属性_休闲56
(教学思路 C#之类二)类成员:属性_休闲57                static void Main(string[] args)
(教学思路 C#之类二)类成员:属性_休闲58                {
(教学思路 C#之类二)类成员:属性_休闲59                        //我们来创建一个军人类Armyman 的实例对象ASoldiers(士兵)
(教学思路 C#之类二)类成员:属性_休闲60                        Armyman ASoldiers = new Armyman();
(教学思路 C#之类二)类成员:属性_休闲61
(教学思路 C#之类二)类成员:属性_休闲62                        //当赋值除海军、陆军、空军时,出现错误提示
(教学思路 C#之类二)类成员:属性_休闲63                        ASoldiers.Armytype1 = "男性";
(教学思路 C#之类二)类成员:属性_休闲64                        //因为有属性赋值时的判断,所以此时属性Armytype1还是原来Armytype字段的初值:空
(教学思路 C#之类二)类成员:属性_休闲65                        Console.WriteLine("赋值后的军种为:" + ASoldiers.Armytype1);
(教学思路 C#之类二)类成员:属性_休闲66                        Console.WriteLine();
(教学思路 C#之类二)类成员:属性_休闲67
(教学思路 C#之类二)类成员:属性_休闲68                        //当正常赋值时,得到正确的结果。
(教学思路 C#之类二)类成员:属性_休闲69                        ASoldiers.Armytype1 = "空军";
(教学思路 C#之类二)类成员:属性_休闲70                        Console.WriteLine();
(教学思路 C#之类二)类成员:属性_休闲71                        //因为有属性赋值时的判断,所以此时属性Armytype1是已经赋的“空军”
(教学思路 C#之类二)类成员:属性_休闲72                        Console.WriteLine("赋值后的军种为:" + ASoldiers.Armytype1);
(教学思路 C#之类二)类成员:属性_休闲73
(教学思路 C#之类二)类成员:属性_休闲74                        //ASoldiers.Armytype = "男性";
(教学思路 C#之类二)类成员:属性_休闲75                        //ASoldiers.ArmyFunction();
(教学思路 C#之类二)类成员:属性_休闲76                        //Console.WriteLine(ASoldiers.Armytype);
(教学思路 C#之类二)类成员:属性_休闲77
(教学思路 C#之类二)类成员:属性_休闲78                }
(教学思路 C#之类二)类成员:属性_休闲79        }
(教学思路 C#之类二)类成员:属性_休闲80                }
 
运行结果为
 
不是兵种,请输入现代战争中的三大兵种!海军、陆军、空军
赋值后的军种为:
战略空军将使战争形态向可控战争转变。
赋值后的军种为:空军
请按任意键继续. . .
对比我上节课用的普通方法即(被我注释掉的)代码如下:
  
对比代码
(教学思路 C#之类二)类成员:属性_休闲 1class Armyman
(教学思路 C#之类二)类成员:属性_休闲 2        {
(教学思路 C#之类二)类成员:属性_休闲 3                public string Armytype = "";
(教学思路 C#之类二)类成员:属性_休闲 4                public void ArmyFunction()
(教学思路 C#之类二)类成员:属性_休闲 5                {
(教学思路 C#之类二)类成员:属性_休闲 6                        switch (Armytype)
(教学思路 C#之类二)类成员:属性_休闲 7                        {
(教学思路 C#之类二)类成员:属性_休闲 8                                case "陆军":
(教学思路 C#之类二)类成员:属性_休闲 9                                        Console.WriteLine("现代陆军都是大规模的机械化部队,拥有大量的重装备和后勤补给。");
(教学思路 C#之类二)类成员:属性_休闲10                                        break;
(教学思路 C#之类二)类成员:属性_休闲11                                case "海军":
(教学思路 C#之类二)类成员:属性_休闲12                                        Console.WriteLine("杜鲁门曾说过:海军到哪里,国家的权利就到哪里 .");
(教学思路 C#之类二)类成员:属性_休闲13                                        break;
(教学思路 C#之类二)类成员:属性_休闲14                                case "空军":
(教学思路 C#之类二)类成员:属性_休闲15                                        Console.WriteLine("战略空军将使战争形态向可控战争转变。");
(教学思路 C#之类二)类成员:属性_休闲16                                        break;
(教学思路 C#之类二)类成员:属性_休闲17                                default:
(教学思路 C#之类二)类成员:属性_休闲18                                        Console.WriteLine("{0}不是兵种,请输入现代战争中的三大兵种!海军、陆军、空军", Armytype);
(教学思路 C#之类二)类成员:属性_休闲19                                        break;
(教学思路 C#之类二)类成员:属性_休闲20                        }
(教学思路 C#之类二)类成员:属性_休闲21                }
(教学思路 C#之类二)类成员:属性_休闲22                //下面的代码实现了和上面一下的功能,先定义一个私有的字段Armytype,再定义一个属性
(教学思路 C#之类二)类成员:属性_休闲23                        //string Armytype = "";
(教学思路 C#之类二)类成员:属性_休闲24                        // public string Armytype1
(教学思路 C#之类二)类成员:属性_休闲25                        //{
(教学思路 C#之类二)类成员:属性_休闲26                        //        get {
(教学思路 C#之类二)类成员:属性_休闲27                        //                return Armytype;
(教学思路 C#之类二)类成员:属性_休闲28
(教学思路 C#之类二)类成员:属性_休闲29                        //        }
(教学思路 C#之类二)类成员:属性_休闲30                        //        set
(教学思路 C#之类二)类成员:属性_休闲31                        //        {
(教学思路 C#之类二)类成员:属性_休闲32                        //                switch (value)
(教学思路 C#之类二)类成员:属性_休闲33                        //                {
(教学思路 C#之类二)类成员:属性_休闲34                        //                        case "陆军":
(教学思路 C#之类二)类成员:属性_休闲35                        //                                Console.WriteLine("现代陆军都是大规模的机械化部队,拥有大量的重装备和后勤补给。");
(教学思路 C#之类二)类成员:属性_休闲36                        //                                Armytype = value;
(教学思路 C#之类二)类成员:属性_休闲37                        //                                break;
(教学思路 C#之类二)类成员:属性_休闲38                        //                        case "海军":
(教学思路 C#之类二)类成员:属性_休闲39                        //                                Console.WriteLine("杜鲁门曾说过:海军到哪里,国家的权利就到哪里 .");
(教学思路 C#之类二)类成员:属性_休闲40                        //                                Armytype = value;
(教学思路 C#之类二)类成员:属性_休闲41                        //                                break;
(教学思路 C#之类二)类成员:属性_休闲42                        //                        case "空军":
(教学思路 C#之类二)类成员:属性_休闲43                        //                                Console.WriteLine("战略空军将使战争形态向可控战争转变。");
(教学思路 C#之类二)类成员:属性_休闲44                        //                                Armytype = value;
(教学思路 C#之类二)类成员:属性_休闲45                        //                                break;
(教学思路 C#之类二)类成员:属性_休闲46                        //                        default:
(教学思路 C#之类二)类成员:属性_休闲47                        //                                Console.WriteLine("{0}不是兵种,请输入现代战争中的三大兵种!海军、陆军、空军", Armytype);
(教学思路 C#之类二)类成员:属性_休闲48                        //                                break;
(教学思路 C#之类二)类成员:属性_休闲49                        //                }
(教学思路 C#之类二)类成员:属性_休闲50                        //        }
(教学思路 C#之类二)类成员:属性_休闲51                        //}
(教学思路 C#之类二)类成员:属性_休闲52
(教学思路 C#之类二)类成员:属性_休闲53                }
(教学思路 C#之类二)类成员:属性_休闲54        class Program
(教学思路 C#之类二)类成员:属性_休闲55        {
(教学思路 C#之类二)类成员:属性_休闲56
(教学思路 C#之类二)类成员:属性_休闲57                static void Main(string[] args)
(教学思路 C#之类二)类成员:属性_休闲58                {
(教学思路 C#之类二)类成员:属性_休闲59                        //我们来创建一个军人类Armyman 的实例对象ASoldiers(士兵)
(教学思路 C#之类二)类成员:属性_休闲60                        Armyman ASoldiers = new Armyman();
(教学思路 C#之类二)类成员:属性_休闲61
(教学思路 C#之类二)类成员:属性_休闲62                        /**/////当赋值除海军、陆军、空军时,出现错误提示
(教学思路 C#之类二)类成员:属性_休闲63                        //ASoldiers.Armytype1 = "男性";
(教学思路 C#之类二)类成员:属性_休闲64                        /**/////因为有属性赋值时的判断,所以此时属性Armytype1还是原来Armytype字段的初值:空
(教学思路 C#之类二)类成员:属性_休闲65                        //Console.WriteLine("赋值后的军种为:" + ASoldiers.Armytype1);
(教学思路 C#之类二)类成员:属性_休闲66                        //Console.WriteLine();
(教学思路 C#之类二)类成员:属性_休闲67
(教学思路 C#之类二)类成员:属性_休闲68                        /**/////当正常赋值时,得到正确的结果。
(教学思路 C#之类二)类成员:属性_休闲69                        //ASoldiers.Armytype1 = "空军";
(教学思路 C#之类二)类成员:属性_休闲70                        //Console.WriteLine();
(教学思路 C#之类二)类成员:属性_休闲71                        /**/////因为有属性赋值时的判断,所以此时属性Armytype1是已经赋的“空军”
(教学思路 C#之类二)类成员:属性_休闲72                        //Console.WriteLine("赋值后的军种为:" + ASoldiers.Armytype1);
(教学思路 C#之类二)类成员:属性_休闲73
(教学思路 C#之类二)类成员:属性_休闲74
(教学思路 C#之类二)类成员:属性_休闲75                        //给字段Armytype赋值为“男性”
(教学思路 C#之类二)类成员:属性_休闲76                        ASoldiers.Armytype = "男性";
(教学思路 C#之类二)类成员:属性_休闲77                        //可以通过这个方法告知男性不符合赋值规则,输出提示
(教学思路 C#之类二)类成员:属性_休闲78                        ASoldiers.ArmyFunction();
(教学思路 C#之类二)类成员:属性_休闲79                        //但此时,“男性”这个值已经赋给了Armytype字段,这是错误的做法。
(教学思路 C#之类二)类成员:属性_休闲80                        Console.WriteLine(ASoldiers.Armytype);
(教学思路 C#之类二)类成员:属性_休闲81
(教学思路 C#之类二)类成员:属性_休闲82                }
(教学思路 C#之类二)类成员:属性_休闲83        }
(教学思路 C#之类二)类成员:属性_休闲84                }
运行结果如下:
男性不是兵种,请输入现代战争中的三大兵种!海军、陆军、空军
男性
请按任意键继续. . .
 
     从结果来看,很明显,如果用上面的例子,男性这个军种如果不采用属性,而是用被我注释掉的方法(第3行)一定会被赋值给Armytype字段的,而使用了属性时,“男性”因为进入了default代码快如46-48行,我们没有加入Armytype=value;这句代码,使得无法对字段Armytype赋值,这时代码第65行,Armytype1的值仍然为空,而不是“男性”,属性的优点就体现在这,所以我在前面的课程中曾说属性是保护字段的。
        本节课我们就讲到这,下节课我们来学习方法的参数类型.