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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏冬 中级黑马   /  2012-11-16 18:14  /  1575 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么答案是12呢??首先x的默认值不是1么?然后get访问器里++x x就等于2 然后set 又加1,用这个字段应该是13啊???

QQ截图20121116181145.png (55.13 KB, 下载次数: 23)

QQ截图20121116181145.png

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
张文 + 1
郭会茹 + 1

查看全部评分

7 个回复

倒序浏览
++x的意思类似于是X=X+1是自身加1是一种算法。
++x与x++的区别是
++x时  x先加一  再执行
遇到x++时  x的值不变,执行完当前操作后,x的值再加一

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
int x=1;和这段代码的输出结果没任何关系,迷惑你而已。
  1. Demo demo = new Demo();
  2.             demo.X = 10; //此时将执行执行set { x=value+1; },x=11.
  3.             Console.WriteLine(demo.X);//此时执行get { return ++x; },x=12
  4.             Console.ReadKey();
复制代码

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
demo.X = 10执行set只写属性,也就是x=10+1,即x=11;
Console.WriteLine(demo.X)中demo.X即执行get只读属性,++x代表在执行get属性前自加1,所以
return 11+1=12;
即++x先自增1后再执行方法,x++线执行方法后再自增1;

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
demo.X=10执行set为其赋值x=x+1,即现在的x为11;然后Console.WriteLine(demo.X);又执行get取值,在取值时return ++x;即先让x自增在为期返回值。所以现在x=12

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
先是demo.X=10是只写的属性,执行set,即value+1(10+1=11);
再是demo.X是只读属性,执行get,即get返回++x,先自增1(11+1=12)

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
陈辉 中级黑马 2012-11-16 22:16:01
7#
1、其实属性就是方法,可以将你的程序改写成如下形式
class Demo
    {
        int x = 1;
        public int get_X()
        {
            return ++x;
        }

        public void set_X(int value)  //此处的参数value,就相当于X属性中的value关键字
       {
            x=value+1;
        }

        static void Main(string[] args)
        {
            Demo demo = new Demo();
            demo.set_X(10);
            Console.WriteLine(demo.get_X());
            Console.ReadKey();
        }
    }

2、验证,将编译好的.exe文件拖到IL反汇编程序中(如下图):


3、像上述的程序,就很好理解了:
     demo.X = 10;等价于上述 程序中的demo.set_X(10);  调用set_X(10) ,这样x就变成了11
     Console.WriteLine(demo.X);;等价于上述程序中的 Console.WriteLine(demo.get_X()); 调用get_X方法,这样x就变成了12,然后输出到控制台中。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
你掉的方法是Demo的x方法,get后的x的值为11,return的值时12,和int x=1;没有关系

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

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