属性和字段的区别

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

 

 程序代码

//私有字段

private int _a;

private bool _b;

private int _c;

private int _d;

 

//属性:

 

//可读写

public int a

{

   set { _a = value; }

   get { return _a; }

}

//只读

public bool b

{

   get { return _b; }

}

//可检测赋值是否正确

public int c

{

   set

    {

       if (value >= 1 && value <= 10)

           _c = value;

       else

           throw new Exception("c的赋值范围[1,10]");

    }

}

//赋值时更改其他状态

public int d

{

   set

    {

       _d = value;

       _b = true;//改变了_b的值

    }

   get { return _d; }

}

 

从例子中可看到属性其实就是对私有字段的读取和写入,以便做些公有字段无法完成的任务,他的使用方式和公有字段完全一样,所以可以理解成属性是为了满足对公有字段的特殊需求而产生的附属品。因而当我们选择使用属性还是使用字段时,主要看需求,如果不需设置访问权限、不需在赋值时检测值是否满足要求、不需要在赋值时修改对象其他一些状态等特殊的需求时,使用公有字段即可,否则就使用属性。

 

属性和字段的区别

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

class MyClass

{

      Private  string  name;

 public string Name

 {

  get{return Name;}

  set{Name=value;}

 }

}

(1)属性可以保证安全,当不在本类中使用时可以保证使用属性名可以避免

用字段的名字。 (2)属性的set和get函数可以限制字段的一些功能,以达到某种目的。如: private int a=0;

public int A

{

    get{return this.a;}

    set

    {

        if(value >= 0 && value <= 100)

              this.a=value;

        else

              throw new Exception("值的范围不合法。");

    }

}

(3)属性没有存储数据的功能,数据都存在字段中,所以只有修改字段的数据才能更改数据,修改属性的值没用。

 

 

属性是类提供给外部调用时用,的可以使用 对象.属性设置或读取一个值

get{reture xxx;}表示可读

set{xxx = value;}表示可写

字段就是类内部用的.存储数据

 

private 字段;

public 属性;

通过属性访问字段

 

 

讲概念可能不好讲,下面来看一个例子吧!(最简单的)

class Program

{

      private int field1;  //这个field1就是字段

      public int Field1     //这个Fileds1就是属性

      {

          get{return field1;}

          set{field1=value;}

      }

}//因为字段的访问修饰符为private外部不能访问它,但可以定义属性为public来访问。希望对你有帮助哦。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值