属性可以是 类(class)、结构(struct)、接口(interface)的命名成员,他提供灵活的机制来读取、写入、或计算私有(private)字段的值,属性可以看做是公共(public)字段的成员,但他实际上是定义了1个“访问器”的特殊方法让私有字段的值可以被读写或操作。
说的形象点吧,比如我们定义1个person类里面有1个私有成员 private string name; 在外界我们实例化1个person对象per,要求为per起个名字,并且输出这个名字,也就是为per.name赋1个值,然后输出??经过前面的学习我们知道,类中的private修饰的变量外界对象是访问不到的,(没法直接per.name="HC666"来弄定^_^)
因此只能在类里面定义1个public修饰的setname与getname方法将“HC666”作为参数来进行写入与输出,这样有点繁琐,这个时候“属性”就该登场了,我们为name定义1个读写属性Name就能够弥补这个不足。
“访问器”
属性的访问器包括有获得或设置属性的可履行语句,访问器的声明可包括1个get访问器(表示只读),或1个set访问器(表示只写),或两个同时包括(表示可读可写)。(上面的例子中我们使用get访问器输出name,使用set访问器写入)
定义属性:
上面的例子中我们可以为name 定义1个读写属性Name,使用外界对象能够访问的public修饰符
private string name; //声明name变量
public string Name //声明变量的属性,读写
{
get { return name; } //定义读访问器,其实就是1个方法
set { name = value; } //定义写访问器,set 方法有1个隐含的参数value
}
再定义1个只读属性吧,比如我们的年龄 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定义1个读写属性
private string name;
//定义属性
public string Name
{//访问器
get { return name; }
set { name = value; } //set自带1个value参数
}
//定义变量age,并且为age定义1个只读属性
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} 今年 {1} 岁了",per.Name,per.Age); //读属性
}
}
}
结果:
抽象属性:
前面也说了,属性可使类、结构、接口的成员,自然也能够是抽象类的抽象属性了,抽象属性同抽象方法1样在派生类中被实现。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test1
{//定义1个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} 今年 {1} 岁了",stu.Name,stu.Age); //读属性
}
}
}