属性是什么?
属性类似现实生活的某些事物的特征,比如人的身高,体重,称这些特性为属性。哪为什么不直接用字段,而要用get,set 包装的对私有字段进行封装,然后供外访问
代码示例
这个一个Person类型,里面有Id,Name ,不使用get,set 封装
public class Person
{
public int Id;
public string Name;
}
c#
但我们有时侯有需求,比如Id不能为负数,Name 的长度范围不能大于10,不使用get,set ,该怎么做呢?
首先把id,name 设置为私有化,为什么要私有化?
如果不私有化,id、name会被实例化后以 .id,.name的方式篡改
Person person = new Person();
person.id = -1;
person.name = "";
c#
接着添加SetId,SetName ,通过这两个方法对id,name 进行赋值,避免直接操作id,name
public class Person
{
private int id;
private string name;
public void SetId(int id)
{
if (id < 0)
{
this.id = id;
}
}
public void SetName(string name)
{
if (name.Length < 10 && name.Length > 0)
{
this.name = name;
}
}
}
c#
对取值也是同样的方法,比如一个有需求,当id 为负数时返回0,name 前面加一个3年级一班
public class Person
{
private int id;
private string name;
public void GetId(int id)
{
if (id < 0)
{
return 0;
}
}
public void GetName()
{
retun "3年级一班"+name;
}
}
c#
这样我们对id,name字段,以get方法,set方法的方式保证字段赋值与取值进行限定保证了数据的安全性
验证
其实get,set; 也做了以get方法,set方法 方式的事情:
反编译代码看看get,set; 做了什么:
这是原代码:
public class Person
{
private int id;
private string name;
public int Id
{
get
{
return id;
}
set
{
id = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
}
c#
反编译后:
public int Id
{
get
{
return id;
}
set
{
id = value;
}
}
c#
get
{
return id;
}
c#
set
{
return id;
}
c#
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
c#
get
{
return name;
}
c#
生成get_Name 方法:
set
{
return name;
}
c#
生成set_Name 方法:
总结:使用属性可以保证字段赋值与取值进行限定保证了数据的安全性
全部评论