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

   属性可以是 类(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的支持,欢迎您的建议与评论^_^……

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值