Diretrizes de uso do array

Para obter uma descrição geral do uso de array e matrizes, consulte Arrays and Classe sistema.array.

Arrays vs.Coleções

Os designers de biblioteca de classes pode ser necessário tomar decisões difíceis sobre quando usar uma matriz e quando retornar uma coleção. Embora esses tipos têm modelos de uso semelhante, eles têm características diferentes de desempenho. Em geral, você deve usar uma coleção quando Adicionar, Remover ou outros métodos para manipular a coleção são suportados.

Para obter mais informações sobre como usar coleções, consulte Coleções e Estruturas de Dados.

Uso de array

Não retorne uma instância de uma matriz interna. Isso permite que chamar o código para alterar a matriz. O exemplo a seguir demonstra como a matriz badChars pode ser alterado por qualquer código que acessa o Path mesmo que a propriedade não implementa o acessador conjunto da propriedade.

Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class ExampleClass
   NotInheritable Public Class Path
      Private Sub New()
      End Sub

      Private Shared badChars() As Char = {Chr(34),"<"c,">"c}
      
      Public Shared Function GetInvalidPathChars() As Char()
         Return badChars
      End Function

   End Class
   
   Public Shared Sub Main()
      ' The following code displays the elements of the 
      ' array as expected.
      Dim c As Char
      For Each c In  Path.GetInvalidPathChars()
         Console.Write(c)
      Next c
      Console.WriteLine()
      
      ' The following code sets all the values to A.
      Path.GetInvalidPathChars()(0) = "A"c
      Path.GetInvalidPathChars()(1) = "A"c
      Path.GetInvalidPathChars()(2) = "A"c
      
      ' The following code displays the elements of the array to the
      ' console. Note that the values have changed.
      For Each c In  Path.GetInvalidPathChars()
         Console.Write(c)
      Next c
   End Sub
End Class
using System;
using System.Collections;

public class ExampleClass
{
   public sealed class Path
   {
      private Path(){}
      private static char[] badChars = {'\"', '<', '>'};
      public static char[] GetInvalidPathChars()
      {
         return badChars;
      }
   }
   public static void Main()
   {
      // The following code displays the elements of the 
      // array as expected.
      foreach(char c in Path.GetInvalidPathChars())
      {
         Console.Write(c);
      }
      Console.WriteLine();

      // The following code sets all the values to A.
      Path.GetInvalidPathChars()[0] = 'A';
      Path.GetInvalidPathChars()[1] = 'A';
      Path.GetInvalidPathChars()[2] = 'A';

      // The following code displays the elements of the array to the
      // console. Note that the values have changed.
      foreach(char c in Path.GetInvalidPathChars())
      {
         Console.Write(c);
      }
   }
}

Você não puder corrigir o problema no exemplo anterior, tornando o badChars matriz somente leitura (ReadOnly no Visual Basic). Você pode clonar o badChars matriz e a cópia de retorno, mas isso tem implicações de desempenho significativos. Consulte a subseção segue, propriedades que Arrays Return, para obter detalhes. O exemplo de código a seguir demonstra como modificar o GetInvalidPathChars método para retornar um clone das badChars matriz.

Public Shared Function GetInvalidPathChars() As Char()
   Return CType(badChars.Clone(), Char())
End Function
public static char[] GetInvalidPathChars()
{
   return (char[])badChars.Clone();
}

Propriedades que retornam matrizes

Você deve usar coleções para evitar ineficiências do código causadas por propriedades que retornam matrizes. No exemplo de código a seguir, cada telefonar para o myObj propriedade cria uma cópia da matriz. sistema autônomo resultado, 2n + 1 cópias da matriz serão criado no seguinte loop.

Dim i As Integer
For i = 0 To obj.myObj.Count - 1
   DoSomething(obj.myObj(i))
Next i
for (int i = 0; i < obj.myObj.Count; i++)
      DoSomething(obj.myObj[i]);

Para obter mais informações, consulte Escolhendo entre propriedades e métodos.

Campos que retornam matrizes

Não use somente leitura (ReadOnly no Visual Basic) campos de matrizes. Se você fizer isso, a matriz é somente leitura e não pode ser alterada, mas elementos na matriz podem ser alterados. O exemplo de código a seguir demonstra como os elementos da matriz somente leitura InvalidPathChars pode ser alterado.

public sealed class Path
{
   private Path(){}
   public static readonly char[] InvalidPathChars = {'\"', '<', '>','|'}'
}
//The following code can be used to change the values in the array.
Path.InvalidPathChars[0] = 'A';

Usando propriedades indexadas em coleções

Use uma propriedade indexada somente sistema autônomo um membro padrão de uma interface ou classe de coleção. Não crie famílias de funções em tipos de coleção não. Um padrão de métodos, sistema autônomo Adicionar, Item, and Contagem, sinais de que o tipo deve ser uma coleção.

Retornando matrizes vazias

String e Array propriedades nunca devem retornar uma null referência. Null pode ser difícil entender neste contexto. Por exemplo, um usuário pode suponha que o código a seguir funcionará.

Public Sub DoSomething()
   Dim s As String = SomeOtherFunc()
   If s.Length > 0 Then
      ' Do something else.
   End If
End Sub
public void DoSomething()
{
   string s = SomeOtherFunc();
   if (s.Length > 0)
   {
      // Do something else.
   }
}

A regra geral é que null, cadeia de caracteres vazia (""), e arrays (item 0) vazios devem ser tratadas da mesma maneira. Retornar uma matriz vazia em vez de um null referência.

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

Diretrizes de uso

Referência

Array

Outros recursos

Diretrizes de Design para desenvolvimento bibliotecas de classe