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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 猫咪不吃糖 中级黑马   /  2013-10-31 22:02  /  2517 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 猫咪不吃糖 于 2013-11-1 14:07 编辑

        public string str { get; set; }

        public string str ;

这两个声明有区别吗?

评分

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

查看全部评分

12 个回复

倒序浏览
public string str {set; get;}声明定义了一个属性
public string str;定义了一个字段

评分

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

查看全部评分

回复 使用道具 举报
上面的那个是定义了一个属性,什么是属性?封装了一个字段,在外界可以访问的字段!
回复 使用道具 举报
本帖最后由 猫咪不吃糖 于 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; }

这个可以展开写,但如果不展开写的话,只是多包了一层,完全没区别吧?
就算什么都不做,也有这样写的必要呢?
还是留个接口以后完善?
回复 使用道具 举报
private int age;
public int Age
{
    get
    {
        return age;
    }
    set
    {
        if (value > 0)
        {
            age = value;
        }
        else
        {
            age = 18;
        }
    }
}
声明属性主要是为了保护你的私有字段不被外界随意访问,随意修改,set是为私有字段赋值的 ,这里可以加上限制条件了  如上
有了set后我就可以选择性的   看看你外界给我的值合不合法   这里年龄就不能小于0吧   所以你给我一个小于0的年龄值   我就不要
我给我的私有字段赋值为默认的18岁,这样可以保证你的私有字段永远合法   不知道你明白了没有   
回复 使用道具 举报
这个GET SET实际上是封装思想 说白了就是留个接口以后自己想怎么改就怎么改
不封装的话 在实际开发环境中 别的程序员有可能对这个字段进行误操作的
封装之后就变成了一个黑盒,只管出入就行了
实际开发中的是这样的
private string str;//定义成私有字段
public string Str{get(IF……);set(……);}//定义成公有,并且设置GET和SET
回复 使用道具 举报
public string str { get; set; }是属性的声明,这是一种属性封装的简写,编译后会自动生成一个与str属性对应的字段。
public string str ;仅仅是声明一个变量。
回复 使用道具 举报
猫咪不吃糖 发表于 2013-10-31 22:23
get { return seconds / 3600; }
set { seconds = value * 3600; }

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

在类中真正存储数据的是字段而不是属性。属性就是为了保护字段的取值和赋值。
回复 使用道具 举报
既然是属性一般都是private,属性主要的作用是对字段的条件判断和约束
回复 使用道具 举报
主要是保护你在类中的变量,以免用户出现非法的输入,这样定义了一个属性,当要求用户输入时,会调用set方法来检验是否正确以及处理方法,而get方法可以用来返回这个值。若只有set,则只能输入,没办法访问,只有get则只能访问。
回复 使用道具 举报
set  get  是指字段的属性,get是表示只读,set表示只写,可以在属性加限制。
回复 使用道具 举报
本帖最后由 §風過無痕§ 于 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; }称为自动属性  就是简化版属性嘛



回复 使用道具 举报
着肯定是有意义的哦 上面一个是定义的一个自动属性  下面一个就是一个字段  自动属性会生成一个字段  但是字段不会生成属性  所以当你定义一个字段的时候为了提高程序安全和访问控制的话 那你还得写一个属性  自动属性就默认帮你生成了一个可以自由读写的方法   楼主可以用反编译软件看一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马