首页  >  文章  >  后端开发  >  C#学习日记27----属性

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

黄舟
黄舟原创
2017-01-21 15:36:561530浏览

属性可以是 类(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); //读属性  
        }  
    }  
}

结果:

659.png

抽象属性:

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

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); //读属性  
        }  
    }  
}

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

以上就是 C#学习日记27----属性的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn