Welcome

首页 / 软件开发 / .NET编程技术 / [你必须知道的.NET]第十一回:参数之惑---传递的艺术(上)

[你必须知道的.NET]第十一回:参数之惑---传递的艺术(上)2011-03-20 博客园 Anytao本文将介绍以下内容:

按值传递与按引用传递深论

ref和out比较

参数应用浅析

1.引言

接上回《第九回:品味类型---值类型与引用类型(中)-规则无边》中,对值类型和引用类型的讨论,其中关于string类型的参数传递示例和解释,引起园友的关注和讨论,可谓一石激起千层浪。受教于装配脑袋的深切指正,对这一概念有了相当进一步的了解,事实证明是我错了,在此向朋友们致歉,同时非常感谢大家的参与,尤其是装配脑袋的不倦相告。

因此,本文就以更为清晰的角度,把我理解有误的雷区作做以深入的讨论与分析,希望通过我的一点点努力和探讨至少对如下几个问题能有清晰的概念:

什么是按值传递?什么是按引用传递?

按引用传递和按引用类型参数传递的区别?

ref与out在按引用传递中的比较与应用如何?

param修饰符在参数传递中的作用是什么?

2.参数基础论

简单的来说,参数实现了不同方法间的数据传递,也就是信息交换。Thinking in Java的作者有过一句名言:一切皆为对象。在.NET语言中也是如此,一切数据都最终抽象于类中封装,因此参数一般用于方法间的数据传递。例如典型的Main入口函数就有一个string数组参数,args是函数命令行参数。通常参数按照调用方式可以分为:形参和实参。形参就是被调用方法的参数,而实参就是调用方法的参数。例如:

using System;

public class Arguments
{
public static void Main(string [] args)
{
string myString = "This is your argument.";
//myString是实际参数
ShowString(myString);
}

private void ShowString(string astr)
{
Console.WriteLine(astr);
}
}

由上例可以得出以下几个关于参数的基本语法:

形参和实参必须类型、个数与顺序对应匹配;

参数可以为空;

解析Main(string [] args),Main函数的参数可以为空,也可以为string数组类,其作用是接受命令行参数,例如在命令行下运行程序时,args提供了输入命令行参数的入口。