黑马程序员技术交流社区

标题: C#面向对象关于字符串和属性的问题 [打印本页]

作者: 马炜亮    时间: 2013-5-14 23:13
标题: C#面向对象关于字符串和属性的问题
本帖最后由 马炜亮 于 2013-5-15 22:05 编辑

刚学C#基础,有几个小问题请教各位大神哈。求答案,求大神那!!!!
1、在属性里get到底做了一件什么事
       string _name;
        public string Name
        {
            get
            {
                if (_name == null)
                {
                    _name = "李四";
                }
                return _name;
            }
            }
Name是只读属性,不能给Name赋值,请问 如果if判断条件成立  这里_name="李四",算不算给_name赋值,输出之后,_name还是不是"李四"。
2、请问  .Tostring和new string的主要区别。比如:将char数组转换成字符串用.Tostring语法不报错但是转换不了。
3、字符串的不可变性是指字符串的值在堆中不会因为重新赋值而删除这个意思吗?

作者: 陈行    时间: 2013-5-14 23:32
1.算给_name赋值  因为_name=“李四”并不是给属性赋值  是给字段赋值
2.tostring是一个方法  new  string是实例一个对象
3.是这个意思  重新赋值时 前面的值还在  只是现在该字符串对象指向的内容不同  前面的值不可改变  这就是不可变性
作者: 熊薇    时间: 2013-5-14 23:43
当类的属性成员取值时调用get方法,如在主函数中实例化了该类的一个对象onePerson,以下语句就调用get方法
   Console.writeLine(onePerson.Name);
_name="李四"当然是给_name赋值,但只读、只写属性针对的是属性,而_name是字段;而且要注意的是只读并不意味着一定不能改变,只是表示在调用时不能直接简单赋值,如:直接写onePerson.Name="LBJ";//错误  ,可以在类的构造方法中对只读属性赋值,在实例化类时对只读属性赋值;
ToString()是把变量转换为string类型,而new string是构造string类型的变量,有多种重载;
字符串是引用类型,如: string name="KB";name="LBJ";改变的只是name的指向,而"KB","LBJ"在内存中都存在;
作者: 盘晟    时间: 2013-5-15 00:44
首先你的第一个语句,string _name; 因为没有赋值,程序会报错,因此不会执行下面的结果;不要想的那么复杂,例如:
       class Person
                {
                    public string name
                    {
                        get;
                        set;
                    }
                {
声明一个属性最主要是为了在程序中能调用这个属性,get是取值,set是设置name的值

至于你说的ToString()方法还要视具体情况而用,意思就是返回一个字符串的结果;而单纯的new string这种写法好像木有,我只记得有 string[] name=new string[10];建一变量名为Name,长度为10的字符串数组,也可以将name看成一个对象,指向你新建的string数。

而字符串的不可变性,上百度查了一下,目的是:为了提升字符串的操作性能,有些知识点,没必要研究的太深入,把重点理解清楚的就行了,随着学习的深入,你会发现你会很轻松的理解以前你不懂的基础问题,老师说:“学从难处学,易从易处用”,对于像我们零基础的同学,开始学的时候是有些难,不过没关系,不要老盯着一个点不放,学会放弃,也是一种智慧!呵呵

作者: 马炜亮    时间: 2013-5-15 22:00
熊薇 发表于 2013-5-14 23:43
当类的属性成员取值时调用get方法,如在主函数中实例化了该类的一个对象onePerson,以下语句就调用get方法
...

谢谢你哈,讲的很详细。
作者: 马炜亮    时间: 2013-5-15 22:03
盘晟 发表于 2013-5-15 00:44
首先你的第一个语句,string _name; 因为没有赋值,程序会报错,因此不会执行下面的结果;不要想的那么复杂 ...

哈哈,你的学习方法说的我茅塞顿开那。谢谢你,好运哈。。




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