黑马程序员技术交流社区

标题: { get; set; }有什么意义吗? [打印本页]

作者: 猫咪不吃糖    时间: 2013-10-31 22:02
标题: { get; set; }有什么意义吗?
本帖最后由 猫咪不吃糖 于 2013-11-1 14:07 编辑

        public string str { get; set; }

        public string str ;

这两个声明有区别吗?


作者: 张小康    时间: 2013-10-31 22:06
public string str {set; get;}声明定义了一个属性
public string str;定义了一个字段
作者: V_John    时间: 2013-10-31 22:18
上面的那个是定义了一个属性,什么是属性?封装了一个字段,在外界可以访问的字段!
作者: 猫咪不吃糖    时间: 2013-10-31 22:23
本帖最后由 猫咪不吃糖 于 2013-10-31 22:28 编辑
张小康 发表于 2013-10-31 22:06
public string str {set; get;}声明定义了一个属性
public string str;定义了一个字段

get { return seconds / 3600; }
set { seconds = value * 3600; }

这个可以展开写,但如果不展开写的话,只是多包了一层,完全没区别吧?
就算什么都不做,也有这样写的必要呢?
还是留个接口以后完善?

作者: 凤凰涅槃    时间: 2013-10-31 22:38
private int age;
public int Age
{
    get
    {
        return age;
    }
    set
    {
        if (value > 0)
        {
            age = value;
        }
        else
        {
            age = 18;
        }
    }
}
声明属性主要是为了保护你的私有字段不被外界随意访问,随意修改,set是为私有字段赋值的 ,这里可以加上限制条件了  如上
有了set后我就可以选择性的   看看你外界给我的值合不合法   这里年龄就不能小于0吧   所以你给我一个小于0的年龄值   我就不要
我给我的私有字段赋值为默认的18岁,这样可以保证你的私有字段永远合法   不知道你明白了没有   
作者: Goes_By    时间: 2013-10-31 22:41
这个GET SET实际上是封装思想 说白了就是留个接口以后自己想怎么改就怎么改
不封装的话 在实际开发环境中 别的程序员有可能对这个字段进行误操作的
封装之后就变成了一个黑盒,只管出入就行了
实际开发中的是这样的
private string str;//定义成私有字段
public string Str{get(IF……);set(……);}//定义成公有,并且设置GET和SET
作者: 蒋东东    时间: 2013-10-31 22:49
public string str { get; set; }是属性的声明,这是一种属性封装的简写,编译后会自动生成一个与str属性对应的字段。
public string str ;仅仅是声明一个变量。

作者: 张小康    时间: 2013-10-31 23:11
猫咪不吃糖 发表于 2013-10-31 22:23
get { return seconds / 3600; }
set { seconds = value * 3600; }

在一个类当中,字段应该是一个极为私有的东西,不应该被外界所访问。

在类中真正存储数据的是字段而不是属性。属性就是为了保护字段的取值和赋值。
作者: wang29901    时间: 2013-10-31 23:23
既然是属性一般都是private,属性主要的作用是对字段的条件判断和约束
作者: 奔跑的胖子    时间: 2013-10-31 23:38
主要是保护你在类中的变量,以免用户出现非法的输入,这样定义了一个属性,当要求用户输入时,会调用set方法来检验是否正确以及处理方法,而get方法可以用来返回这个值。若只有set,则只能输入,没办法访问,只有get则只能访问。
作者: 陈福军    时间: 2013-10-31 23:48
set  get  是指字段的属性,get是表示只读,set表示只写,可以在属性加限制。
作者: §風過無痕§    时间: 2013-11-1 09:33
本帖最后由 §風過無痕§ 于 2013-11-1 09:36 编辑

以下纯粹是草鸟个人理解
          public string str { get; set; }//这是定义了一个属性

        public string str ;//这里是定义了一个公共的字段  但一般默认情况下字段都应该定义为私有字段 private修饰


命名规范:通常情况下 字段的对象名为小写  如:private string str;   
                 属性的对象名第一个字母为大写  如:public string Str{ get; set; }


字段和属性的:

属性是对字段的封装!有利于对私有字段的保护。
属性可以看做是一个对字段封装的方法

private string str;
public string Str
{
get{ return str;}//取值
set{ str=value; }赋值  可以在{}内设置条件(方法)  保护私有字段 str
/*set
{
        .......method
}*/
}

public string Str{ get; set; }称为自动属性  就是简化版属性嘛




作者: 夢醒了⊙﹏⊙b心    时间: 2013-11-1 12:06
着肯定是有意义的哦 上面一个是定义的一个自动属性  下面一个就是一个字段  自动属性会生成一个字段  但是字段不会生成属性  所以当你定义一个字段的时候为了提高程序安全和访问控制的话 那你还得写一个属性  自动属性就默认帮你生成了一个可以自由读写的方法   楼主可以用反编译软件看一下




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