黑马程序员技术交流社区

标题: 字段和属性区别 [打印本页]

作者: 李拴同    时间: 2012-12-22 16:48
标题: 字段和属性区别
本帖最后由 李拴同 于 2012-12-26 11:11 编辑

看了视频 看到字段和属性  总感觉理解的不清楚做了如下总结 各位看看对不对 或者补充一些他们的区别以及用法
属性 开头大写
                          public int Age
                             {
                                set{}
                                get{}
                              }
字段 开头小些public int age
字段好处 判断用户输入的和法制而属性不可以判断
属性的用法 class Person5
             {
                private int age
                public int Age
                   {
                      set{this.age=value}
                       get{return this.age}  
                    }
              }
千万不可  this.Age  reture this.Age 因为字段不存数据 会变成死循环
作者: 王靖雯    时间: 2012-12-22 19:42
我是初学.net的,对于你这个问题,我今天刚刚看过视频,我觉得C#之所以这样处理字段,就像C++中,基本上类的成员变量(相当于这里的字段)都是私有的,方法一般是公有的,为了防止成员变量被无意修改或者非法操作及访问,通过成员函数来进行保护操作,其实道理是一样的,不知道能不能帮助你
作者: 汪书凯    时间: 2012-12-22 19:51

可以理解为字段是类内部用的,属性是类外部用的。

下面是个C#写的例子,这个例子作用是可以通过属性获取时间值,但是只能通过SetTime()方法设定时间值,我想这也是为什么要分字段和属性的一大原因吧。

  首先声明的是private类型的变量(字段)hours,通常字段写法都是加个"_"符号,然后声明只读属性hours。

  在类内部可以通过变量(字段)对其进行读写,在类外部不能访问变量(字段),只能访问属性。而且在此例内如果想修改时间值,只能通过调用SetTime()方法往里传值(因为这里的各属性只有get没有set,只在类内部的SetTime()方法中对其对应字段进行赋值操作),而不能通过类实例对象timeTest1的 timeTest1.hours=12 这样进行赋值。
public class TimeTest
{
    private int _hours;
    public int hours
    {
        get { return _hours; }
    }

    private int _minutes;
    public int minutes
    {
        get { return _minutes; }
    }

    //可以不加"private",C#中类成员默认都是private类型的
    int _seconds;
    public int seconds
    {
        get { return _seconds; }
    }

    public void SetTime(int hours, int minutes, int seconds)
    {
        this._hours = hours;
        this._minutes = minutes;
        this._seconds = seconds;
    }
}
作者: duanhuilin    时间: 2012-12-22 20:52
属性可以理解为是对字段的封装,程序员可以对字段进行有规则的赋值。
本人是这样理解的。。。
作者: 谢辉林    时间: 2012-12-22 21:41
简单的说属性可以设置是否读写,可以通过(set)属性给内部字段赋值和加上自己的逻辑判断等限制,通过(get)属性取值,用一句话总结就是
属性适合和外部交互使用,字段是在程序内部使用,是隐藏的
作者: 李家小爷    时间: 2012-12-23 00:42
个人理解,属性是对字段的封装,这样比较安全,在类的外部通过属性给字段赋值。个人理解可能有错呵呵
作者: 阮佳佳    时间: 2012-12-23 11:00
属性是对字段的封装,提高了程序的安全性,在类的外部再通过属性给字段赋值。也可以不设字段,直接用简单属性的方式。都可以。
作者: 苏波    时间: 2012-12-23 11:33
字段是用来存放值的,而属性按照一定的规则来取得值,然后放在字段中,可以说属性是字段的升级
作者: ︶ㄣ布丁    时间: 2012-12-23 12:08
属性只局限于类中方法的声明,并不与类中其他成员相关。例如:
void setA(String s){}
String getA(){}
当一个类中拥有这样一对方法时,我们可以说,这个类中拥有一个可读写的a属性(注意是小写a)。如果去掉了set的方法,则是可读属性,反之亦然。

类成员(字段),通常是在类中定义的类成员变量,例如:
public class A{
private String s = "123";
}
我们可以说A类中有一个成员变量叫做s。
作者: 苗昆明    时间: 2012-12-24 23:44
字段用来表示与类和对象相关联的数据,当我们在类中需要计算的时候需要添加字段。
属性用来表示类的状态。当我们需要描述对象状态的特征时要再类中添加属性。
作者: 管冉    时间: 2012-12-25 00:49
属性理解起来运用起来还是需要点时间来掌握的。
字段的话,直接定义是在类里面方法外面的变量,当有静态方法时,不能调用非静态字段,其他情况,都可以直接把字段看成类里面的一个变量来看,
作者: 黄锦成    时间: 2012-12-25 09:33
private int age;定义的叫做字段,
public void setAge();方法中的Age叫做属性
平时我们都认为字段属性没多大区别,都这么叫,有时是属性,有时叫字段,心里明白就好
作者: rla540    时间: 2012-12-25 14:01
      其实属性就是一种变形的方法!我查看了属性的反汇编代码,和我自己写的同功能的方法,结果发现,两个的反汇编代码基本一模一样的。可以使用方法能解决了,为什么不搞出来属性这个东西呢?我想可能是因为,属性看起来和字段很“像”----直观。
作者: 李拴同    时间: 2012-12-26 11:10
哦 谢谢大家了学习了
作者: 鲜学良    时间: 2012-12-26 12:02
属性可以对设值、取值的过程进行非法值控制,比如年龄禁止设值负数,而字段则不能进行这样的设置。虽然
一般情况下get 读取的值就是set 设置的值,但是可以让get 读取的值不是set 设置的值的,极端的例子。Public
Age{get{return 100;}set{}}。加分的补充回答:用reflector 反编译可以看出,属性内部本质上就是set_***、get_***
方法,详细参考传智播客.net 培训视频中串讲.net 基础的部分。
class Person
{
public int Age
{
get
{
return 3;
}
set
{
}
}
}
Person p1 = new Person();
p1.Age = 30;
p1.Age++;
Console.Write(p1.Age);//输出3




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2