zoukankan      html  css  js  c++  java
  • 转载:C#中的属性、和字段的区别

    本文导读:C#中类的属性将字段公开。字段应该保持私有的,类通过属性的get和set访问器访问字段。属性提供了一种抽象级别来允许您更改字段,然而不影响通过使用你的类在外部访问属性。

    在C#中,我们可以非常自由的、毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋于某个范围的值、或是要求字段只能读或只能写,或 是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个块:set和get,set块负责属性的写入工 作,get块负责属性的读取工作。在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。当缺少其中一块时属性就只能 读或只能写,set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。

    属性由以下几部分构成:


    1:私有字段,用来存储变量(后备存储),这个字段之所以是私有的,是为了让它只能通过属性来赋值。

    2:一个get访问器,它负责读取数据,用于返回字段值或者是用于计算并返回字段值。以return或者是throw语句终止。其中可以包含些简单的逻辑处理,例如数据验证等等。

    3:一个set访问器,负责给属性赋值,类似于一个返回类型为void的方法,可以包含逻辑处理,例如可以根据默认的值通过计算后返回结果。

     

    属性分类:


    1:按访问修饰符来分:可将属性标记为 public、private、protected、internal 或 protected internal。这些访问修饰符定义类的用户如何才能访问属性。
    2:属性还可以标记成,静态属性,实例属性,虚属性,抽象属性,需要注意的是,如果属性已经标记成静态(static ) 的,那么后面不能和虚(virtual),抽象(abstract),重写(override)混用。
    3:同一属性如果只包含get访问器,我们称之为只读属性,如果只包含set访问器,叫可写属性,如果即有get, 又有set访问器,我们叫可读可写属性。

    1、读/写属性

    读/写属性是一个具有get()和set()访问器的属性.

    语法: [访问修饰符] 数据类型 属性
    {
    get{ };
    set{ };
    }

    2、只读属性

    仅具有get()访问器属性称为只读属性.

    语法: [访问修饰符] 数据类型 属性名
    {
    get{ };
    }

    3、只写属性

    仅具有set()访问器属性称为只写属性,不推荐使用只写属性.

    语法: [访问修饰符] 数据类型 属性名
    {
    set{ };
    }

     

    属性的定义实例:

            
    public string sName
    {
        get;
        set;
    }
    
    private string name;
    public string Name
    {
       get{return  name;}
       set{ name=value;}
    }
    

    属性、和字段的区别

    相同点:

    都是类的成员,属性是类的属性,而字段是类色数据成员

    不同点:


    1 属性可进行数据绑定
    2 属性可通过set和get方法进行数据安全性检验,而字段不行
    3 属性可进行线程同步


    public string Name
    {
    set{
    lock(this)
    {
    }
    }
    }


    4 属性可以是抽象的,而字段不行
    5 属性可以接口的形式表现
    6 基于属性的索引
    7 不要直接把字段转化为属性

    8 字段在值的处理上并不是那么的灵活,给它赋什么它就是什么,不允许经过逻辑处理。如果把一个人的身高写成一个字段,给它赋值1000M,这显示是不正常的数据,字段无法处理这种特殊数据。
    9 与字段不同,属性不作为变量来分类。因此,不能将属性作为 ref参数或 out参数传递。

    转自:http://www.studyofnet.com/news/144.html

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 黑色星期五
    Java实现 蓝桥杯VIP 算法训练 比赛安排
    Java实现 蓝桥杯VIP 算法训练 比赛安排
    Java实现 蓝桥杯VIP 算法训练 斜率计算
    Java实现 蓝桥杯VIP 算法训练 斜率计算
    Java实现 蓝桥杯VIP 算法训练 整数平均值
    Java实现 蓝桥杯VIP 算法训练 整数平均值
    控件动态产生器(使用RegisterClasses提前进行注册)
    Delphi编写自定义控件以及接口的使用(做了一个TpgDbEdit)
    Log4delphi使用心得
  • 原文地址:https://www.cnblogs.com/xixi-/p/5300531.html
Copyright © 2011-2022 走看看