一个关于流程控制的问题

CSDN 帖子链接

 

代码
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Console.WriteLine(Test2());
// 输出 AA

TestClass ts
= Test();

Console.WriteLine(ts.str);
// 输出 CC

Console.ReadLine();
}

public static TestClass Test()
{
TestClass ts
= new TestClass();
try
{
ts.str
= "AA"; //
return ts; // 在执行return的时候、返回值就已经确定了,在此时要对数据进行拷贝
// 由于 Ts 是引用类型即是一个指针,数据拷贝直接拷贝的是 内存地址
// 由于方法到此时还没有执行完毕所以还要继续执行
}
catch (Exception ex)
{
ts.str
= "BB";
Console.WriteLine(ex.Message);
return ts;
}
finally
{
ts.str
= "CC"; // 由于Finally的特殊性:无论是否发生异常都要执行finally语句
// 该语句会在执行return 语句之后 方法执行完毕前 执行。
// 由于数据拷贝是在return语句执行是发生的,并且拷贝的是内存地址,
// 而该语句又是对内存地址所指向的数据进行修改、而不是修改这个内存地址,
// 所以 此操作影响了外界到的数据、更确切的说是影响了其内存地址中的数据
}

}


public static string Test2()
{
string str = "";
try
{
str
= "AA"; //
return str; // 在执行return的时候、返回值就已经确定了,在此时要对数据进行拷贝
// 由于 string 是值类型,数据拷贝直接拷贝的是 数据
// 由于方法到此时还没有执行完毕所以还要继续执行
}
catch (Exception ex)
{
str
= "BB";
Console.WriteLine(ex.Message);
return str;
}
finally
{
str
= "CC"; // 由于Finally的特殊性:无论是否发生异常都要执行finally语句
// 该语句会在执行return 语句之后 方法执行完毕前 执行。
// 由于数据拷贝是在return语句执行是发生的,并且拷贝的是数据,
// 所以该语句的执行不会影响到返回值
}
}
}


public class TestClass
{
public string str;
}

 

posted @ 2010-10-28 23:05  把爱延续  阅读(297)  评论(0编辑  收藏  举报