黑马程序员技术交流社区
标题:
属性
[打印本页]
作者:
马毅
时间:
2012-12-23 01:09
标题:
属性
属性是方法的一种,经过封装,若从客户端代码看,属性只是一个字段,但属性本身不能存值,但可以通过属性中的访问器实现,忘了在那看到过这样一句话,说变量应总是私有的,而属性的出现很好的保护了数据的安全性,下面是一个示例:
public class Person
{
private string name;
public String Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
}
复制代码
以上代码定义了一个私有字段name,而定义了共有的属性Name,我们可以通过:
Person ps = new Person();
ps.Name = "张三";
复制代码
来给使用属性。
以上中的get、set就是访问器,get访问其不带任何参数,但必须返回和属性定义的类型,(上例中的string),get也不带任何显式参数,但set总是有一个默认的参数,类型和属性相同,表示为value,所以通过对get、set的控制,可以实现只读属性,只写属性,例如:
private int age;
/// <summary>
/// 只读属性
/// </summary>
public int Age
{
get
{
return this.age;
}
}
private bool sex;
/// <summary>
/// 只写属性
/// </summary>
public bool Sex
{
set
{
this.sex = value;
}
}
复制代码
也可以给属性加上访问修饰符,以更好的控制,甚至允许对属性设置不同级别的访问修饰符,例如:
public String Name
{
private get
{
return this.name;
}
set
{
this.name = value;
}
}
复制代码
但不能同时给两个访问器设置访问修饰符,否则会报错。至于为什么我也想不明白(或许是为了有一个和属性的访问级别相同吧,若属性为公有,而两个访问器都是私有,这样属性还有什么用...),我们可以在属性中加入一些逻辑控制,例如限制年龄小于十八岁的:
public int Age
{
get
{
return this.age;
}
set
{
if (value < 18)
{
throw new Exception("年龄不能小于十八岁");
}
else
{
this.age = value;
}
}
}
复制代码
若属性中无任何逻辑,可以用自动属性:
/// <summary>
/// 自动属性
/// </summary>
public string Address
{
get;
set;
}
复制代码
使用自动属性,无需为其创建数据字段,编译器会自动创建。
其他C#基础请看
这里
作者:
许庭洲
时间:
2012-12-23 07:07
值得学习ing!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2