Compartilhar via


Diretrizes de uso de matriz

Para obter uma descrição geral de arrays e o uso de matriz, consulte Enquanto a classe.

Arrays vs.Coleções

Os designers de biblioteca de classe talvez precise tomar decisões difíceis sobre quando usar uma matriz e retornar uma coleção. Embora esses tipos de modelos de uso semelhante, eles têm características diferentes de desempenho. Em geral, você deve usar uma coleção quando Add, 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 matriz

Não retornam uma instância interna de uma matriz. Isso permite que o código para alterar a matriz de chamada. O exemplo a seguir demonstra como a matriz badChars podem ser alteradas por qualquer código que acessa o Path propriedade mesmo, embora a propriedade não implementa o acessador do conjunto.

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 pode corrigir o problema no exemplo anterior, tornando o badChars matriz readonly (ReadOnly em Visual Basic). Você pode clonar o badChars matriz e retornar a cópia, mas isso tem implicações de desempenho significativos. Consulte a subseção que segue os Arrays que retornar, para obter detalhes de propriedades. O exemplo de código a seguir demonstra como modificar o GetInvalidPathChars método para retornar um clone da 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 causadas por propriedades que retornam matrizes do código. No exemplo de código a seguir, cada chamada para o myObj propriedade cria uma cópia da matriz. Como 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 readonly (ReadOnly em Visual Basic) campos de matrizes. Se fizer isso, a matriz é somente leitura e não pode ser alterada, mas os 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 como um membro padrão de uma coleção de classe ou interface. Não crie famílias de funções em tipos de não-coleção. Um padrão de métodos, como Add, Item, e Count, sinaliza que o tipo deve ser uma coleção.

Retornando as matrizes vazias

Stringe Array Propriedades nunca devem retornar um null de referência. Nullpode ser difícil de entender neste contexto. Por exemplo, um usuário pode pressupor 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 as matrizes vazias (item 0) devem ser tratado do mesmo modo. Retornar uma matriz vazia em vez de um null de referência.

Portions Copyright 2005 Microsoft Corporation. Todos os direitos reservados.

Portions Copyright Addison-Wesley Corporation. Todos os direitos reservados.

Para obter mais informações sobre as diretrizes de design, consulte a "diretrizes de Design do Framework: Convenções, idiomas e padrões de reutilizável.Bibliotecas de rede" catálogo por Krzysztof Cwalina e Brad Abrams, publicado pela Addison-Wesley, 2005.

Consulte também

Referência

Array

Conceitos

Diretrizes de uso

Outros recursos

Diretrizes de Design para desenvolvimento bibliotecas de classe