Membros com um número variável de parâmetros
São usadas para passar um número variável de parâmetros para um membro. Alguns idiomas, such sistema autônomo translation from VPE for Csharp, fornecem uma palavra-chave decora uma matriz que é usada para passar variável argumentos. Para idiomas que não fornecem uma palavra-chave, a ParamArrayAttribute atributo fornece essa funcionalidade. A palavra-chave e o atributo afetam o último parâmetro na assinatura do membro. Esse parâmetro deve ser uma matriz de dimensão única.
O exemplo de código a seguir demonstra a definição e chamar um método que leva um número variável de parâmetros. Observe que no DemonstrateVariableParameters método, os argumentos não são colocados em uma matriz antes de ligar UseVariableParameters.
Public Shared Sub UseVariableParameters(ParamArray list() as Integer)
For i as Integer = 0 to list.Length -1
Console.WriteLine(list(i))
Next i
Console.WriteLine()
End Sub
Public Shared Sub DemonstrateVariableParameters()
Manager.UseVariableParameters(1,2,3,4,5)
End Sub
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);
}
As diretrizes a seguir podem ajudar entender quando ele é vantajoso usar variáveis matrizes de parâmetros e apropriados.
Considere adicionar a palavra-chave params Parâmetros de matriz se você espera que os usuários finais para passar um pequeno número de elementos.
Se o desenvolvedor passará muitos elementos nos cenários comuns, a params palavra-chave é provavelmente menos útil porque não é provável que o desenvolvedor passará grande número de objetos in-line.
Não use conjuntos de parâmetros se o chamador quase sempre já teria a entrada em uma matriz.
Por exemplo, dados de byte normalmente são armazenados e manipulados em matrizes de bytes. Adicionando o params palavra-chave para um parâmetro de matriz de byte não aborda um cenário comum porque os desenvolvedores normalmente não funcionam com byte individuais que já não são armazenados em uma matriz de byte.
Não use conjuntos de parâmetros se a matriz é modificada pelo membro levando o parâmetro de matriz params.
O common linguagem tempo de execução (CLR) pode ter criado um objeto de matriz temporária. Se o método modifica uma matriz temporária, as modificações não estão disponível para o chamador.
Considere usando a palavra-chave params em uma sobrecarga simples, mesmo se uma sobrecarga mais complexa não é possível usá-lo.
É possível que os desenvolvedores se beneficiará da tendo o params matriz em uma sobrecarga, mesmo se não estiver em todas as sobrecargas.
Tente parâmetros da ordem para que seja possível usar a palavra-chave params.
Isso significa que, quando possível, um parâmetro de matriz deve ser o último parâmetro especificado. O exemplo de código a seguir demonstra uma ordem de parâmetro incorreto.
Overloads Public Function Add (i as Integer,j as Integer, numberBase as Int16) _
as Integer
public int Add (int i,int j, short numberBase)
Overloads Public Function Add (i as Integer, j as Integer, k as Integer, _
numberBase as int16) as Integer
public int Add (int i, int j, int k, short numberBase)
' Can't use params array.
Overloads Public Function Add (numbers() as Integer, numberBase as Int16) _
as Integer
// Can't use params array.
public int Add (int [] numbers, short numberBase)
sistema autônomo parâmetros devem ser reordenados da seguinte maneira:
Overloads Public Function Add (numberBase as Int16, i as Integer,j as Integer) _
as Integer
public int Add (short numberBase, int i,int j)
Overloads Public Function Add (numberBase as Int16, i as Integer, _
j as Integer, k as Integer) as Integer
public int Add (short numberBase, int i, int j, int k)
' Can use params array.
Overloads Public Function Add (numberBase as Int16, _
ParamArray numbers() as Integer) as Integer
// Can use params array.
public int Add (short numberBase, params int [] numbers)
Considere fornecer sobrecargas especiais e caminhos de código para chamadas com um pequeno número de argumentos em APIs extremamente sensíveis ao desempenho.
Seguindo essa diretriz, você pode evitar a criação de matrizes quando um membro é chamado com um pequeno número de argumentos. Os nomes de parâmetro devem ser uma forma singular do parâmetro de matriz seguido de um sufixo numérico. O exemplo de código a seguir mostra uma assinatura do membro que segue essa diretriz.
Public Shared Sub WriteLine( _
format as String, _
arg0 as Object, _
arg1 as Object, _
arg2 as Object _
)
public static void WriteLine(
string format,
object arg0,
object arg1,
object arg2
)
Esteja ciente de que nulo (Nothing no Visual Basic) pode ser passado sistema autônomo um argumento de matriz params.
O membro deve verificar um null matriz antes de processá-lo.
Não use sistema autônomo métodos varargs, também conhecidos sistema autônomo sistema autônomo reticências.
Porque o varargs convenção de chamada não é compatível com CLS, não deve ser usado em membros públicos. Ele pode ser usado internamente.
Partes direitos autorais 2005 Microsoft Corporation. Todos os direitos reservados.
Partes direitos autorais Addison-Wesley Corporation. Todos os direitos reservados.
Para obter mais informações sobre diretrizes de design, consulte a "diretrizes de design do estrutura: Catálogo de convenções, idiomas e padrões para bibliotecas do .NET reutilizável"Krzysztof Cwalina e Brad Abrams, publicado pela Addison-Wesley, 2005.
Consulte também
Conceitos
Outros recursos
Diretrizes de design de membro
Diretrizes de Design para desenvolvimento bibliotecas de classe