ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

数组被用来把一个可变数量的参数传递给成员。在 CLR 中,一些编程语言(如 C#)提供了一个用来为传递可变参量的数组进行修饰的关键字。而对于没有提供这种关键字的编程语言,则能够使用 ParamArrayAttribute 特性来提供这个功能。这些关键字和特性能够影响到成员签名中排在最后的参数,并且这个参数还必须是一个单维数组。

下列代码范例示范了定义并调用一个获取可变数量的参数的方法。注意,在 DemonstrateVariableParameters 方法中,参量并没有在调用 UseVariableParameters 之前被放进一个数组中。

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 关键字的使用变得可能。

这表示,在可能的时候,一个数组参数应该是最后才被指定的参数。下列代码范例示范了一个错误的参数次序。

public int Add (int i, int j, short numberBase) 
public int Add (int i, int j, int k, short numberBase) 
// 不能使用 params 数组。
public int Add (int[] numbers, short numberBase) 

这些参数应该被重新排列成如下所示:

public int Add (short numberBase, int i, int j)
public int Add (short numberBase, int i, int j, int k) 
// 能够使用 params 数组。
public int Add (short numberBase, params int[] numbers)
考虑在一个对性能极端敏感的 API 中为少数参量的调用而提供特殊的重载和代码路径。

通过遵循这个指导方针,你能够避免在一个获取少数参量的成员被调用的时候创建数组。参数的名称应该是遵循数组参数并且以一个递增的数字来作为后缀的单数形式。下列代码范例示范了一个遵循了这个指导方针的成员签名。

public static void WriteLine(
    string format, 
    object arg0, 
    object arg1, 
    object arg2
)
明白 null 值(在 Visual Basic 中是 Nothing)能够与一个 params 数组参量一样被传递。

你的成员应该在处理数组之前检查它的值是否为 null。

不要使用可变容的方法,否则会被当作省略号。

因为可变容的调用约定与 CLS 不兼容,因此它不应该在公开的成员中被使用。不过它可以在成员的内部使用。

posted on 2007-02-01 20:06  Laeb  阅读(1097)  评论(0编辑  收藏  举报