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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 许庭洲 于 2012-7-16 10:57 编辑

求程序执行过程,步骤和结果
System.Collections。
class Class1  {
       private string str = "Class1.str";
       private int i = 0;
       static void StringConvert(string str)  {
           str = "string being converted.";
       }
       static void StringConvert(Class1 c)  {
           c.str = "string being converted.";
       }
       static void Add(int i)  {
           i++;
       }
       static void AddWithRef(ref int i)  {
           i++;
       }
       static void Main()  {
           int i1 = 10;
           int i2 = 20;
           string str = "str";
           Class1 c = new Class1();
           Add(i1);
           AddWithRef(ref i2);
           Add(c.i);
           StringConvert(str);         
           StringConvert(c);
           Console.WriteLine(i1);
           Console.WriteLine(i2);
           Console.WriteLine(c.i);
          Console.WriteLine(str);//为什么本行输出是str , 不懂?
           Console.WriteLine(c.str);
       }  
    }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

3 个回复

正序浏览
本帖最后由 许庭洲 于 2012-7-16 13:54 编辑
曾玉锋 发表于 2012-7-16 12:56
结果是:
10
21

谢谢你!回答的太棒了!
回复 使用道具 举报
结果是:
10
21
0
str
string beging converted.


程序执行步骤:
从main()函数进入逐步执行,
int i1=10;
int i2=20;
string str="str";
/*这里再次重复声明变量str,这里的str是局部变量,
而上面的  private string str = "Class1.str";
在Class1类里是全局变量。在局部变量和全局变量名相同的情况下
要想对全局变量进行操作,得通过类的实例.变量名进行(static 声明的变量用类名.变量名)
否则,在局部变量作用范围内,得到的将是局部变量的值。
*/

Class1 c =new Class1();//创建一个Class1实例
Add(i1);
/*调用Add(int i)方法;因为方法的参数是值传递,i的作用范围仅在方法内,
对外部的数据无影响。
*/
AddWithRef(ref i2);

/*调用AddWithRef( ref int i)方法;因为方法的参数是用ref修饰的引用传递,i在方法中参与运算以后结果将保留,
对外部的数据有影响。
*/
Add(c.i); //调用对象c的属性i=0.作为参数
StringConvert(str);//调用StringConvert(str)将值传递给全局变量str
StringConvert(c);//给传递的对象c属性str赋值为"string beging converted."
Console.WriteLine(i1);//输出结果10;
Console.WriteLine(i2);//输出结果21;
Console.WriteLine(c.i);//输出对象c的i属性输出0;
Console.WriteLine(str);//这里设计作用域问题,上面有简单说明,输出str
Console.WriteLine(c.str);//调用对象c的str属性,输出string beging converted.


我想,楼主你主要是变量的作用域问题有点迷糊,可以多看看。

static void Add(int i)  {
           i++;
       }
static void AddWithRef(ref int i)  {
           i++;
       }
这两个方法中的i都是参数中的i,而不是全局变量i

个人见解,若错误请见谅。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
  static void StringConvert(string str)  和  string str = "str"  里德str是两回事吧 只是名字一样  但是两个不同的字符串 当然Console.WriteLine(str) 输出的是 string str = "str" 这个值

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

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