文章详情

属性是什么?

属性类似现实生活的某些事物的特征,比如人的身高,体重,称这些特性为属性。哪为什么不直接用字段,而要用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 方法:

总结:使用属性可以保证字段赋值与取值进行限定保证了数据的安全性

发布时间:2025-07-12
comment

全部评论