C#学习日记27----属性

来源:互联网 发布:java程序员必看的书籍 编辑:程序博客网 时间:2024/05/29 19:40

   属性可以是 类(class)、结构(struct)、接口(interface)的命名成员,他提供灵活的机制来读取、写入、或计算私有(private)字段的值,属性可以看作是公共(public)字段的成员,但他实际上是定义了一个“访问器”的特殊方法让私有字段的值可以被读写或操作。

   说的形象点吧,比如我们定义一个person类里面有一个私有成员 private string name; 在外界我们实例化一个person对象per,要求为per起个名字,并且输出这个名字,也就是为per.name赋一个值,然后输出??经过前面的学习我们知道,类中的private修饰的变量外界对象是访问不到的,(无法直接per.name="HC666"来搞定^_^) 因此只能在类里面定义一个public修饰的setname与getname方法将“HC666”作为参数来进行写入与输出,这样有点繁琐,这个时候“属性”就该登场了,我们为name定义一个读写属性Name就可以弥补这个不足。

“访问器”

            属性的访问器包含有获取或者设置属性的可执行语句,访问器的声明可包含一个get访问器(表示只读),或者一个set访问器(表示只写),或者两个同时包含(表示可读可写)。(上面的例子中我们使用get访问器输出name,使用set访问器写入

 

定义属性:

             上面的例子中我们可以为name 定义一个读写属性Name,使用外界对象能够访问的public修饰符

         private string name;     //声明name变量

         public string Name     //声明变量的属性,读写

            {  

               get { return name;  }  //定义读访问器,其实就是一个方法

                           set { name = value;  }  //定义写访问器,set 方法有一个隐含的参数value

             }

        再定义一个只读属性吧,比如我们的年龄 age 是固定的只读

        private uint age=10; //声明变量 age

        private string Age    //声明变量的属性,只读

            {  

               get { return age;  }  //读访问器

             }

 

属性的实例:

   

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Test1{    class person    {  //定义变量name,并且为name定义一个读写属性        private string name;        //定义属性        public string Name        {//访问器            get { return name; }            set { name = value; } //set自带一个value参数        }        //定义变量age,并且为age定义一个只读属性        private uint age=10;        public uint Age        {            get { return age; }        }    }    class Program    {        static void Main(string[] args)        {            person per = new person();            per.Name = "HC666";  //执行写入属性            Console.WriteLine("我的名字叫:{0}\t今年 {1} 岁了",per.Name,per.Age); //读属性        }    }}


结果:

 

 

抽象属性:

          前面也说了,属性可以使类、结构、接口的成员,自然也可以是抽象类的抽象属性了,抽象属性同抽象方法一样在派生类中被实现。

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Test1{//定义一个person抽象类    abstract class person    {//定义抽象属性        public abstract string Name        {//读写            get;            set;        }        public abstract uint Age        {//只读            get;        }    }    //定义派生类    class student : person    {        private string name;        private uint age=10;        //实现抽象属性        public override string Name        {            get            {                return name ;            }            set            {                name=value;            }        }        public override uint Age        {            get { return age; }        }    }    class Program    {        static void Main(string[] args)        {            student stu = new student();            stu.Name = "HC666";  //执行写入属性            Console.WriteLine("我的名字叫:{0}\t今年 {1} 岁了",stu.Name,stu.Age); //读属性        }    }}


结果与上一个例子是一样的。

 

 

    感谢对HC666的支持,欢迎您的建议与评论^_^……

 

2 0
原创粉丝点击