A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴清华 中级黑马   /  2012-8-6 17:05  /  1748 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在类中,字段和属性存在哪些区别?属性是如何更改字段的值?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

4 个回复

倒序浏览
1,字段:与类或对象相关联的变量,一般访问域为private;
2,属性:字段的封装,通过访问器(accessor)来进行读写操作,一般为public;
3,通过对象.属性来设置或读取一个值:
   class Person
  {   
       private int age; //字段   
       public int Age   //属性   
      {        
          get { return age; } //表示可读      
          set {
                     if(age > 0 && age < 100)
                    {
                        age = value;
                    }
                    else
                    {
                        age = 18;
                    }
               } //表示可写,还可以进行条件判断进行写操作
       }
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
字段是用来描述类的,一般用private修饰;
属性一般是对字段进行读取操作的,用public进行修饰的,可以在属性中添加一些判断条件,只有满足这些条件的前提下才能对字段进行读取操作,这样就避免了直接对字段操作,达到了保护字段的效果;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
属性和字段的区别
    在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来访问。希望对你有帮助哦。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
属性是用于保护一个私有变量,public修饰,具有get/set的方法。用来保护变量用的。
具有 set,get方法的属性,叫做读写属性可以读可以写
只有get方法 只能读不能写,称为只读属性 比如人的出生年月等。一般定义了就不能修改了。
只有set方法,只能写不能读(用的很少)
一般用法
比如要将age 定义为属性
int age: 然后ctrl+R,E(或者右键点重构,选择封装字段)
点2下确定
这时候就会出现      
int age;
public int Age
{
  get { return age; }
  set { age = value; }
}
这时候我们就可以定义了,
比如修改
get
{
if(age>=0)
{
return age;
}
else
{
return 0;
}
}
用来保护age属性,不会出现年龄小于0的情况

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马