您的位置:首页 > 其它

一个关于流程控制的问题

2010-10-28 23:05 148 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: