zoukankan      html  css  js  c++  java
  • 自学.NET之路属性,索引器

    轉自:http://www.cnblogs.com/smile2008/articles/1217567.html

    class Test
    {
         private static string _name;
         private static string _id;
         static void Main()
         {
          _name=Console.ReadLine();     //接受用户输入
          _id=Console.ReadLine();
         }
    }

    虽然以上代码可以正常工作,但公开类的数据成员通常认为是一个不好的编程做法。因为用户为字段_id输入的值在赋值之前没有经过必要的验证,所以用户可以输入任何值而不受限制。

    这是我们不想看到的,所以C#提供‘属性’来对类中字段提供保护。

    [访问修饰符] 数据类型 属性名       //读,写属性
    {
         get{};
         set{};
    }


        class Test
        {
            private int _age=20;      //还记得命名规范,成员变量前加前缀 _ 吗?。注意如果初始值未赋值将输出默认值0

            public int Age                //属性名应该为帕斯卡命名法,表示它返回的实体
            {
                get                          //读/属性
                {
                    return _age;
                }

                set                          //写/属性
                {
                    if (value < 18)                        //value为传进去的值
                    {
                        Console.WriteLine("年纪太小");
                    }
                    else
                    {
                        _age = value;
                    }
                }
            }
            static void Main()
            {
                Test obj = new Test();
                Console.WriteLine(obj.Age);    //直接读取Age 返回_age.返回初始值。注意如果初始值未赋值将输出默认值0
                obj.Age = 12;                           //往Age内写值,小于18输出:年纪太小。
                obj.Age = 25;                           //往Age内写值,大于18,赋值成功。
                Console.WriteLine(obj.Age);      //赋值成功后,覆盖初始值,输出新值。
            }

        }

    控制台输出:
    20
    年纪太小
    25

    [访问修饰符] 数据类型 属性名       //只读属性
    {
     get{};

    }

        class Test
        {
            private int _age;   //注意如果初始值未赋值将输出默认值0     _age=10 控制台输出 10 
            public int Age    
            {
                get                     //读/属性
                {
                    return _age;
                }

            }
            static void Main()
            {
                Test obj = new Test();
                Console.WriteLine(obj.Age); //直接读取Age 返回_age.返回初始值。注意如果初始值未赋值将输出默认值0
            }
        }

    控制台输出:
    0

    [访问修饰符] 数据类型 属性名  //无意义的只写属性
    {
     set{}; //写属性
    }

    只写属性是没有任何意义的。.NET类库设计指南明确地指出:“不要使用只写属性”。

    但是我们遇到类字段过多怎么办呢?自己手写,比较耗时。编译器提供了一种快捷封装字段的功能。
    选中要封装的字段名,反键-重构-封装字段-确定即可。
    在SharpDevelop中選中類字段,單擊右鍵,彈出的菜單中有一個建立屬性,程序會自動幫你建好.





    索引器

    索引器允许按照数组的方式检索对象的数组元素。正如属性可以使用户像访问字段一样访问对象的数据,索引器可以使用户像访问数组一样访问类成员。这就是索引的用处。
    必须注意的是,仅有一个元素时没必要使用索引器进行检索,使用索引一般都是针对类的数组元素。

    [访问修饰符] 数据类型 this [数据类型 标识符]
    {
     get{};
     set{};
    }

     

        class Car           //定义一个汽车
        {
            string[] wheels = new string[4];         //定义车有四个轮子

            public Car()             //构造函数内赋值
            {
                wheels[0] = "左前轮";
                wheels[1] = "右前轮";
                wheels[2] = "左后轮";
                wheels[3] = "右后轮";
            }

         // Car类的索引器 string为返回值的数据类型,this在这里作用索引器的名称,而且必须用this
         // int为接受值的数据类型,index为标识符

            public string this[int index] 
            {
                get
                {
                    return wheels[index];
                }
                set
                {
                    wheels[index] = value;
                }
            }
        }

        class test              //定义一个测试类
        {
            public static void Main(String[] args)
            {
                Car car1 = new Car();           //实例化Car类

                Console.WriteLine("car1的第一个轮子是:{0}", car1[0]);      //wheels[0] = "左前轮";
                Console.WriteLine("car1的第三个轮子是:{0}", car1[2]);      //wheels[2] = "左后轮";

                car1[1] = "新的右前轮";         //更新初始值
                car1[3] = "新的右后轮";

                Console.WriteLine("car1的第二个轮子是:{0}", car1[1]);          //输出新值
                Console.WriteLine("car1的第四个轮子是:{0}", car1[3]);
            }
        }


    控制台输出:
    car1的第一个轮子是:左前轮
    car1的第三个轮子是:左后轮
    car1的第二个轮子是:新的右前轮
    car1的第四个轮子是:新的右后轮

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    项目Alpha冲刺(团队6/10)
    项目Alpha冲刺(团队5/10)
    项目Alpha冲刺(团队4/10)
    项目Alpha冲刺(团队3/10)
    项目Alpha冲刺(团队1/10)
    Alpha代码规范、冲刺任务与计划
    团队作业第六次—团队Github实战训练
    Alpha冲刺(8/10)——2019.4.30
    Alpha冲刺(7/10)——2019.4.29
    Alpha冲刺(6/10)——2019.4.28
  • 原文地址:https://www.cnblogs.com/Athrun/p/1281648.html
Copyright © 2011-2022 走看看