(14)C# 基础—— 字段和属性

.NET C# Web开发学习之路(14)—— 字段和属性

字段

字段是一种数据成员,其中容纳了一个值类型或者一个引用类型的引用。一般在类的内部做数据交互使用。字段就好比我们的个人所有财产,仅供个人使用,所以一般是private修饰。

属性

属性是一种用于访问对象或类的特性的成员。属性具有访问器,这些访问器指定它们在的值被读写时需要执行的语句,因此属性提供了一种机制,即把读取和写入对象的某些特性与一些操作关联起来。可以像使用公共数据成员一样使用属性。

属性结合了字段和方法的多个方面。对于对象的用户,显示为字段,访问该属性仍需要完全相同的语法;对于类的实现者,属性是一个或两个代码块,表示一个get访问器和一个set访问器。读取时,执行get访问器的代码块;写入时,执行set访问器的代码块。

    注意:属性不能作为ref或out传递参数

属性一般用来在面向对象设计中描述对象的静态特征。属性其实就是外界访问私有字段的入口,属性本身不保存任何数据,在对属性赋值和读取的时候其实就是操作对应的私有字段。属性本质是一个方法,通过get和set来操作对应的字段。

属性的作用

  • 避免出现非法数据,例如一个年龄属性,正常逻辑年龄是不可以出现负数的,如果用户对哦年龄进行了负数的赋值,我们沟通过set方法加入判断逻辑,从而排除这种非法数据。

    private int age;
    public int Age
    {
        get { return age;}
        set
        {
            if(value < 0)
            {
                age = 18;
            }
            else
            {
                age = value;
            }   
        }
    }
    
  • 限定属性只读或者只写。例如有些属性为了保护数据,我们只能读取,不能赋值。具体使用根据需要屏蔽get或者set方法大道只读或者只写。

    private const double pi=3.14;
    public double Pi
    {
        get{return pi;}
    }
    
    //
    
    Student s = new Student();
    s.pi = 111;//运行程序,编译报错,无法对属性或索引器pi赋值,它是只读的
    

字段与属性的联系

有时候我们会比较矛盾,既然已经有了字段,为什么还要用属性呢?

如果在一个类中,有一个共有字段,那么在这个类的外部可一随便访问和使用这个字段,想怎么来就怎么来,一旦这个字段被赋了一个非常离谱的值,那么对程序可能会造成很大的影响。以前我在写代码的时候,没有注意到这一点,在类中只使用字段,而且还是public修饰的,没有使用属性来保护那些本来应该是类的私有的字段。

总结:

  • 属性对外:暴露数据,数据是可以存储在字段里的,也可以是动态计算出来的
  • 对内:保护字段不受“非法值”污染
  • 一般情况下,他们都用于表示实体(对象或者类型)的状态。
  • 属性大多数情况下是字段的包装器

建议:永远使用属性,而不是字段来暴露数据,即字段永远是private或者protected的

自动属性

编写属性的新语法(.NET 3.0 及以后版本)

private int age;
public int Age
{
    get{return age;}
    set{age = value;}
}
可以直接写成:
public int Age{get;set;}

注意:没有特定业务逻辑的属性都可以简写成自动属性,自动属性的格式不能更改。自动属性对应的字段由编译器自动生成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值