属性是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称为“访问器”的特殊方法。这使得数据在可被轻松访问的同时,仍能提供方法的安全性和灵活性。
1).属性使类能够以一种公开的方法获取和设置值,同时隐藏实现或验证代码。
2).get 属性访问器用于返回属性值而 set 访问器用于分配新值。这些访问器可以有不同的访问级别。
3).value 关键字用于定义由 set 索引器分配的值。
4).不实现 set 方法的属性是只读的。
属性的特点:
1)允许调用方法,如同它们是公共数据成员。
2)可以通过简单的名称进行访问。
3)可以为静态成员或者实例成员。
4)属性的get访问器没有参数。
5)属性的set访问器包含隐式value参数。
举个例子:
using System;
public class Person
{
//私有字段_age,_name类外不能访问,可通过属性name,age访问
//属性是特殊的方法
private string _name;
private int _age;
public string name //最基本的属性,未在get{}、set{}里面提供控制操作
{
get //取值访问器
{
return this._name;
}
set //赋值访问器
{
this._name=value;
}
}
public int age
{
get
{
if(this._name=="ben9144") //当实例的姓名设置为ben9144时,控制输出值为25岁
{
return 25;
}
else
{
return this._age;
}
}
set
{
if(value>0 && value<100) //当实例的年龄设置控制为0-100间才有效
{
this._age=value;
}
else
{
Console.WriteLine("你输入的年龄不合理,必须在(0,100)间!");
}
}
}
}
public class MyProperty
{
public static void Main (string[] args)
{
Person p =new Person();
Console.Write("请输入一个人的姓名:");
p.name=Console.ReadLine();
Console.Write("请输入此人的年龄::");
p.age=Convert.ToInt32(Console.ReadLine());
Console.WriteLine("输入的姓名:"+p.name); //通过name属性访问私有字段
Console.WriteLine("输入的年龄:"+p.age); //通过age属性可以对私有字段_age提供可控制性的访问
}
}
结果:1.当输入的姓名为ben9144,则输出的年龄始终为25(输入年龄若超出0~100,输出还是25岁但提示输入年龄不合理)2.当输入的姓名为其它的,年龄为实际输入(输入年龄若超出0~100,提示输入年龄不合理)