参数数目可变的成员

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>
参数数目可变的成员
.NET Framework 开发人员指南
参数数目可变的成员

数组用于将数目可变的参数传递给成员。某些语言(如 C#)提供了一个关键字,用于修饰传递可变参数的数组。对于不提供关键字的语言,ParamArrayAttribute 属性可提供此功能。该关键字和属性影响成员签名的最后一个参数。该参数必须是一维数组。

下面的代码示例演示定义和调用参数数目可变的方法。注意,在 DemonstrateVariableParameters 方法中,调用 UseVariableParameters 前参数不会放入数组。

C#
复制代码

public static void UseVariableParameters(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
{
Console.WriteLine(list[i]);
}
Console.WriteLine();
}
public static void DemonstrateVariableParameters()
{
Manager.UseVariableParameters(1,2,3,4,5);
}

下列准则有助于了解何时使用可变数组作为参数是适合的和有益的。
如果需要最终用户传递少量元素,则考虑向数组参数添加 params 关键字。

通常,如果开发人员要传递很多元素,则 params 关键字可能用处不大,因为开发人员不太可能内联传递大量对象。
如果调用方几乎总要将输入放入数组,则不要使用 params 数组。

例如,字节数据通常在字节数组中存储和处理。通常,将 params 关键字添加到字节数组参数不能解决问题,因为开发人员通常不使用还未存储到字节数组中的单个字节。
如果数组由采用 params 数组参数的成员进行了修改,则不要使用 params 数组。

公共语言运行库 (CLR) 可能已创建了一个临时数组对象。如果方法修改临时数组,则这些修改对调用方是不可用的。
考虑在简单重载中使用 params 关键字,即使更复杂的重载不能使用它。

在某个重载(即使不是所有重载)中使用 params 数组,对开发人员都是有好处的。
尽量对参数进行排序,以使它能够使用 params 关键字。

这意味着,只要可能,数组参数就应该是指定的最后一个参数。下面的代码示例演示的参数排序是不正确的。

C#
复制代码

public int Add (int i,int j, short numberBase)


C#
复制代码

public int Add (int i, int j, int k, short numberBase)


C#
复制代码

// Can't use params array.
public int Add (int [] numbers, short numberBase)

这些参数应重新排序,如下所示:

C#
复制代码

public int Add (short numberBase, int i,int j)


C#
复制代码

public int Add (short numberBase, int i, int j, int k)


C#
复制代码

// Can use params array.
public int Add (short numberBase, params int [] numbers)

考虑在性能极为敏感的 API 中为使用少量参数的调用提供特殊重载和代码路径。

按照此准则,在调用带有少量参数的成员时可以避免创建数组。参数名称应为数组参数的单数形式,后跟一个数字后缀。下面的代码示例演示一个符合此准则的成员签名。


C#
复制代码

public static void WriteLine(
string format,
object arg0,
object arg1,
object arg2
)

注意 null(在 Visual Basic 中为 Nothing)可以作为 params 数组参数进行传递。

在处理 null 数组之前,成员应对其进行检查。
不要使用 varargs 方法,这种方法以省略号的形式表示。

因为 varargs 调用约定不符合 CLS,所以不应在公共成员中使用。它可以在内部使用。

部分版权所有 2005 Microsoft Corporation。保留所有权利。

部分版权所有 Addison-Wesley Corporation。保留所有权利。

有关设计指南的更多信息,请参见 Krzysztof Cwalina 和 Brad Abrams 编著、Addison-Wesley 于 2005 年出版的“Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries”(《框架设计指南:可重用 .NET 库的约定、术语和模式》)。
请参见
概念
参数设计
其他资源
成员设计准则
类库开发的设计准则
posted @ 2008-05-04 15:50  netcorner  阅读(190)  评论(0编辑  收藏  举报