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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 似鱼非鱼 中级黑马   /  2013-10-17 12:53  /  5473 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

private string name;中"name"为字段,
是不是用get/set封装起来就叫属性了?

25 个回复

正序浏览
学习路过~~~~
回复 使用道具 举报
很好的,很好的
回复 使用道具 举报
通常将字段指定为private,在类的内部使用。
将属性指定为public,对类外部公开使用,通过get和st访问器对字段提供安全,有效范围的保护。
回复 使用道具 举报
可以简单记成,在类中,但是在方法外的叫字段
有get,set方法的叫属性
回复 使用道具 举报
属性为Public
字段为private
出现属性是为了封装字段,属性中自带的set和get方法,就是为在外面可以给字段赋值
并且,如果不写属性,编译器在编译时候,也会自动生成属性的中间代码的
这点可以通过反编译一个.exe的net程序看见。
回复 使用道具 举报
属性:定义成public,其他类也可调用
字段:一般定义成private,本类中使用
class Person
    {
        private int age;//字段

        public int Age//属性,ctrl+r+e
        {
            get { return age; }//读
            set {
//数据过滤
                if (value<0)
                {
                    new Exception("年龄不能为负数!");
                }
                else if (value>130)
                {
                    new Exception("年龄不正常!");
                }
                else
                {
                    age = value;
                }
            }//写
        }
        
    }
回复 使用道具 举报
李洋 中级黑马 2013-10-29 08:50:48
20#
1。字段,方法,属性都可以叫做类的成员Member, 它们都需要定义访问级别;
2。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的;
3。属性看似字段,不是字段,可以进行非法值控制,可以设置只读。
回复 使用道具 举报

问题解决请将分类设为"已解决".黑马有你更精彩
回复 使用道具 举报
字段、方法和属性的概念区别:
        类的字段准确地说应该是类的数据成员,其定义是:用于存储类和类的实例相关数据的变量。
方法就是类的函数成员,是一个为实现类的某一个特定功能的函数。因此也称为类的方法。
       属性是一个代表类的实例或类中的一个数据项的函数成员。从定义可以看出,属性是类的一个函数成员或者说是方法。对类的属性的设定和获取可以用两个访问器set和get来实现。
       字段,方法和属性的定义的区别如下示例:
      class MyClass
      {
             //数据成员或者字段的定义
             public int iTemp = 10;
             private int iTestValue;
             //属性的定义
             public int MyValue
              {
                     set   //设定属性
                     {
                          iTestValue= value;
                     }
                     get    //从属性获取值
                     {
                        return iTestValue;
                      }
             }
            //方法的定义
            public void SetValue(ref int iValue)
             {
                  TheRealValue = iValue;
            }
             public int GetValue()
             {
                    return TheRealValue;
             }
      }
       从概念上可以区分字段和属性的区别,字段是一个用于存储数据的变量,属性是一个方法或者说是一个函数成员。
那么既然属性是一个方法,那么他和方法的区别是什么呢?
       从定义就可以看出来,属性其实本身就是方法。但既然把属性和方法定义成为两个概念,那么他们之间肯定有不同地地方。个人感觉,他们最大的区别首先是属性没有参数列表,而方法必须要有参数列表,哪怕没有参数,也要放一个空括号在那。其次,属性定义里要有set和get两个访问器,用于获得属性的值和设定属性的值。其余的地方没有发现不同之处,属性里也可以判定数据的合法性,和方法没有什么两样。
回复 使用道具 举报
如问题被解决,请及时把分类设为"已解决",黑马有你更精彩!
回复 使用道具 举报
字段是用来存储数据的。属性是用来保护字段不被外来的随意修改。。。
回复 使用道具 举报
将字段封装为属性,其实就是面向对象中封装这个特点的一个具体应用
因为我们在定义字段的时候,一般都会定义为私有的,private int _age;
但是要在类的外部是访问不到类中私有成员的,因此,通常就利用属性将字段封装起来
public int Age

   get{return this.Age;}
    set{this.Age=value;}

,这样在累的外部就可以通过属性访问到了,
顺便说下,字段和属性在定义时的一些注意点:
字段的访问修饰符一般都定义为私有的,并且字段的名称一般都会使用下划线开头,尽量都使用小写  例如  private string _name;
而在定义属性的时候,一般访问修饰符都使用public,并且尽量属性名首字母都使用大写,例如  public string Name{get;set}
这种写法也称之为自动属性,当写完字段后,按下快捷键Ctrl+R+E就会自动弹出,会有一个预览
希望能帮助你理解字段和属性

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
得到正确答案后,请把帖子设置为已解决,版主才会给你加分
回复 使用道具 举报
得到正确答案后,请把帖子设置为已解决,版主才会给你加分
回复 使用道具 举报
属性是不存储任何的实值,它是域的扩展(即我们通常说的成员变量等)
属性(property)
-充分体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,即借助于get和set对属性的值进行读写;另一方面还可以对数据的访问属性进行控制(当然也可以通过对普通域加readonly关键字来实现。
-设计原则:属性封装了对域的操作。把要访问的域设为private,通过属性中的get和set操作对域进行设置或访问。
-不能把属性作为引用类型或输出参数来进行传递。
-get方法没有参数;set方法有一个隐含的参数value。除了使用了abstract修饰符的抽象属性,每个访问器的执行体中只有分号“;”外,其他的所有属性的get访问器都通过return来读取属性的值,set访问器都通过value来设置属性的值。
-采用间接方式来访问对象的属性(间接调用get、set方法):对象.属性 = 值(调用set),变量 = 对象.属性(调用get)。
-在属性的访问声明中:
只有set访问器,表明该属性是只写的。
只有get访问器,表明该属性是只读的。
既有set访问器,又有get访问器,表明该属性是可读可写的。

属性和字段的比较:属性不能使用ref/out 型参数    属性使用前必须赋值
属性使用前必须赋值,例如:

Time lunch;

lunch.Hour = 12;//错误,lunch没有初始化
上面说那么多其实就一句话,我感觉初学者 没必要那么深入研究属性和字段。
------------------------------------------------------------------------------------------------------
| 属性就是对字段的封装 ,使用get和set访问器来控制如何设置或返回字段值|
------------------------------------------------------------------------------------------------------

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
属性提供了对私有字段的访问封装
回复 使用道具 举报
属性是类成员,能提供灵活的机制来读取、编写或计算私有字段的值。 可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。
所以说:属性是一个操作字段的值的特殊方法(函数).
回复 使用道具 举报
属性是类成员,能提供灵活的机制来读取、编写或计算私有字段的值。 可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法
所以说:属性是一个操作字段的值的特殊方法(函数).
回复 使用道具 举报
get和set方法是属性的必要不充分条件,属性的本质是一种方法,用来代替 “将私有字段用公有方法进行读取和赋值” 这种设计模式,因为这样写的人实在太多了,微软就在C#中把这个方法封装一下,改名为属性,封装,就是用一种通用的模式隐藏起内部的细节,这个方法隐含一个value参数,用以接受赋值,get和set方法不一定都要有,如果这个字段是只读的,那就没有set,如下测试可以证明属性本质上是方法:
public string Name
{
      get { return Name; }
      set { Name = value; }
}
运行,程序抛出堆栈溢出的异常,意味着有一个方法不断的递归自己,就是“属性”Name

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

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