Ler em inglês

Partilhar via


NameObjectCollectionBase Classe

Definição

Fornece uma classe base de abstract para uma coleção de chaves String e valores Object associados que podem ser acessados com a chave ou com o índice.

C#
public abstract class NameObjectCollectionBase : System.Collections.ICollection
C#
public abstract class NameObjectCollectionBase : System.Collections.ICollection, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
C#
[System.Serializable]
public abstract class NameObjectCollectionBase : System.Collections.ICollection, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
Herança
NameObjectCollectionBase
Derivado
Atributos
Implementações

Exemplos

O exemplo de código a seguir mostra como implementar e usar a NameObjectCollectionBase classe .

C#
using System;
using System.Collections;
using System.Collections.Specialized;

public class MyCollection : NameObjectCollectionBase
{
   // Creates an empty collection.
   public MyCollection()  {
   }

   // Adds elements from an IDictionary into the new collection.
   public MyCollection( IDictionary d, Boolean bReadOnly )  {
      foreach ( DictionaryEntry de in d )  {
         this.BaseAdd( (String) de.Key, de.Value );
      }
      this.IsReadOnly = bReadOnly;
   }

   // Gets a key-and-value pair (DictionaryEntry) using an index.
   public DictionaryEntry this[ int index ]  {
      get  {
          return ( new DictionaryEntry(
              this.BaseGetKey(index), this.BaseGet(index) ) );
      }
   }

   // Gets or sets the value associated with the specified key.
   public Object this[ String key ]  {
      get  {
         return( this.BaseGet( key ) );
      }
      set  {
         this.BaseSet( key, value );
      }
   }

   // Gets a String array that contains all the keys in the collection.
   public String[] AllKeys  {
      get  {
         return( this.BaseGetAllKeys() );
      }
   }

   // Gets an Object array that contains all the values in the collection.
   public Array AllValues  {
      get  {
         return( this.BaseGetAllValues() );
      }
   }

   // Gets a String array that contains all the values in the collection.
   public String[] AllStringValues  {
      get  {
         return( (String[]) this.BaseGetAllValues( typeof( string ) ));
      }
   }

   // Gets a value indicating if the collection contains keys that are not null.
   public Boolean HasKeys  {
      get  {
         return( this.BaseHasKeys() );
      }
   }

   // Adds an entry to the collection.
   public void Add( String key, Object value )  {
      this.BaseAdd( key, value );
   }

   // Removes an entry with the specified key from the collection.
   public void Remove( String key )  {
      this.BaseRemove( key );
   }

   // Removes an entry in the specified index from the collection.
   public void Remove( int index )  {
      this.BaseRemoveAt( index );
   }

   // Clears all the elements in the collection.
   public void Clear()  {
      this.BaseClear();
   }
}

public class SamplesNameObjectCollectionBase  {

   public static void Main()  {

      // Creates and initializes a new MyCollection that is read-only.
      IDictionary d = new ListDictionary();
      d.Add( "red", "apple" );
      d.Add( "yellow", "banana" );
      d.Add( "green", "pear" );
      MyCollection myROCol = new MyCollection( d, true );

      // Tries to add a new item.
      try  {
         myROCol.Add( "blue", "sky" );
      }
      catch ( NotSupportedException e )  {
         Console.WriteLine( e.ToString() );
      }

      // Displays the keys and values of the MyCollection.
      Console.WriteLine( "Read-Only Collection:" );
      PrintKeysAndValues( myROCol );

      // Creates and initializes an empty MyCollection that is writable.
      MyCollection myRWCol = new MyCollection();

      // Adds new items to the collection.
      myRWCol.Add( "purple", "grape" );
      myRWCol.Add( "orange", "tangerine" );
      myRWCol.Add( "black", "berries" );
      Console.WriteLine( "Writable Collection (after adding values):" );
      PrintKeysAndValues( myRWCol );

      // Changes the value of one element.
      myRWCol["orange"] = "grapefruit";
      Console.WriteLine( "Writable Collection (after changing one value):" );
      PrintKeysAndValues( myRWCol );

      // Removes one item from the collection.
      myRWCol.Remove( "black" );
      Console.WriteLine( "Writable Collection (after removing one value):" );
      PrintKeysAndValues( myRWCol );

      // Removes all elements from the collection.
      myRWCol.Clear();
      Console.WriteLine( "Writable Collection (after clearing the collection):" );
      PrintKeysAndValues( myRWCol );
   }

   // Prints the indexes, keys, and values.
   public static void PrintKeysAndValues( MyCollection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )  {
         Console.WriteLine( "[{0}] : {1}, {2}", i, myCol[i].Key, myCol[i].Value );
      }
   }

   // Prints the keys and values using AllKeys.
   public static void PrintKeysAndValues2( MyCollection myCol )  {
      foreach ( String s in myCol.AllKeys )  {
         Console.WriteLine( "{0}, {1}", s, myCol[s] );
      }
   }
}


/*
This code produces the following output.

System.NotSupportedException: Collection is read-only.
   at System.Collections.Specialized.NameObjectCollectionBase.BaseAdd(String name, Object value)
   at SamplesNameObjectCollectionBase.Main()
Read-Only Collection:
[0] : red, apple
[1] : yellow, banana
[2] : green, pear
Writable Collection (after adding values):
[0] : purple, grape
[1] : orange, tangerine
[2] : black, berries
Writable Collection (after changing one value):
[0] : purple, grape
[1] : orange, grapefruit
[2] : black, berries
Writable Collection (after removing one value):
[0] : purple, grape
[1] : orange, grapefruit
Writable Collection (after clearing the collection):

*/

Comentários

A estrutura subjacente para essa classe é uma tabela de hash.

Cada elemento é um par chave/valor.

A capacidade de um NameObjectCollectionBase é o número de elementos que o NameObjectCollectionBase pode conter. À medida que os elementos são adicionados a um NameObjectCollectionBase, a capacidade é aumentada automaticamente conforme necessário por meio da realocação.

O provedor de código hash distribui códigos hash para chaves na NameObjectCollectionBase instância. O provedor de código hash padrão é o CaseInsensitiveHashCodeProvider.

O comparador determina se duas chaves são iguais. O comparador padrão é o CaseInsensitiveComparer.

No .NET Framework versão 1.0, essa classe usa comparações de cadeia de caracteres sensíveis à cultura. No entanto, no .NET Framework versão 1.1 e posterior, essa classe usa ao comparar cadeias CultureInfo.InvariantCulture de caracteres. Para obter mais informações sobre como a cultura afeta comparações e classificação, consulte Executando operações de cadeia de caracteres de Culture-Insensitive.

null é permitido como uma chave ou como um valor.

Atenção

O BaseGet método não distingue entre null o que é retornado porque a chave especificada não foi encontrada e null que é retornada porque o valor associado à chave é null.

Construtores

NameObjectCollectionBase()

Inicializa uma nova instância da classe NameObjectCollectionBase que está vazia.

NameObjectCollectionBase(IEqualityComparer)

Inicializa uma nova instância da classe NameObjectCollectionBase que está vazia, tem a capacidade inicial padrão e utiliza o objeto IEqualityComparer especificado.

NameObjectCollectionBase(IHashCodeProvider, IComparer)
Obsoleto.
Obsoleto.

Inicializa uma nova instância da classe NameObjectCollectionBase que está vazia, tem a capacidade inicial padrão e usa o provedor de código hash e o comparador especificados.

NameObjectCollectionBase(Int32)

Inicializa uma nova instância da classe NameObjectCollectionBase que está vazia, tem a capacidade inicial especificada e usa o provedor de código hash e o comparador padrão.

NameObjectCollectionBase(Int32, IEqualityComparer)

Inicializa uma nova instância da classe NameObjectCollectionBase que está vazia, tem a capacidade inicial especificada e usa o objeto IEqualityComparer especificado.

NameObjectCollectionBase(Int32, IHashCodeProvider, IComparer)
Obsoleto.
Obsoleto.

Inicializa uma nova instância da classe NameObjectCollectionBase que está vazia, tem a capacidade inicial especificada e usa o provedor de código hash e o comparador especificados.

NameObjectCollectionBase(SerializationInfo, StreamingContext)
Obsoleto.

Inicializa uma nova instância da classe NameObjectCollectionBase, que pode ser serializada e usa o SerializationInfo e o StreamingContext especificados.

Propriedades

Count

Obtém o número de pares chave-valor contidos na instância NameObjectCollectionBase.

IsReadOnly

Obtém ou define um valor que indica se a instância de NameObjectCollectionBase é somente leitura.

Keys

Obtém uma instância de NameObjectCollectionBase.KeysCollection que contém todas as chaves da instância de NameObjectCollectionBase.

Métodos

BaseAdd(String, Object)

Adiciona uma entrada com a chave e o valor especificados à instância NameObjectCollectionBase.

BaseClear()

Remove todas as entradas da instância NameObjectCollectionBase.

BaseGet(Int32)

Obtém o valor da entrada no índice especificado da instância NameObjectCollectionBase.

BaseGet(String)

Obtém o valor da primeira entrada com a chave especificada da instância de NameObjectCollectionBase.

BaseGetAllKeys()

Retorna uma matriz String que contém todas as chaves na instância NameObjectCollectionBase.

BaseGetAllValues()

Retorna uma matriz Object que contém todos os valores na instância NameObjectCollectionBase.

BaseGetAllValues(Type)

Retorna uma matriz do tipo especificado que contém todos os valores na instância NameObjectCollectionBase.

BaseGetKey(Int32)

Obtém a chave da entrada no índice especificado da instância NameObjectCollectionBase.

BaseHasKeys()

Obtém um valor que indica se a instância NameObjectCollectionBase contém entradas cujas chaves não são null.

BaseRemove(String)

Remove as entradas com a chave especificada da instância de NameObjectCollectionBase.

BaseRemoveAt(Int32)

Remove a entrada no índice especificado da instância NameObjectCollectionBase.

BaseSet(Int32, Object)

Define o valor da entrada no índice especificado da instância NameObjectCollectionBase.

BaseSet(String, Object)

Define o valor da primeira entrada com a chave especificada na instância NameObjectCollectionBase, se encontrada; caso contrário, adiciona uma entrada com a chave especificada e o valor para a instância NameObjectCollectionBase.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetEnumerator()

Retorna um enumerador que itera por meio de NameObjectCollectionBase.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetObjectData(SerializationInfo, StreamingContext)
Obsoleto.

Implementa a interface ISerializable e retorna os dados necessários para serializar a instância NameObjectCollectionBase.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
OnDeserialization(Object)

Implementa a interface ISerializable e gera o evento de desserialização quando a desserialização for concluída.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

ICollection.CopyTo(Array, Int32)

Copia todo o NameObjectCollectionBase em um Array unidimensional compatível, começando no índice especificado da matriz de destino.

ICollection.IsSynchronized

Obtém um valor que indica se o acesso ao objeto NameObjectCollectionBase é sincronizado (thread-safe).

ICollection.SyncRoot

Obtém um objeto que pode ser usado para sincronizar o acesso ao objeto NameObjectCollectionBase.

Métodos de Extensão

Cast<TResult>(IEnumerable)

Converte os elementos de um IEnumerable para o tipo especificado.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base em um tipo especificado.

AsParallel(IEnumerable)

Habilita a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable em um IQueryable.

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

Acesso thread-safe

Os membros estáticos públicos (Shared no Visual Basic) desse são thread-safe. Não há garantia de que qualquer membro de instância seja seguro para threads.

Essa implementação não fornece um wrapper sincronizado (thread-safe) para um NameObjectCollectionBase, mas as classes derivadas podem criar suas próprias versões sincronizadas do NameObjectCollectionBase usando a SyncRoot propriedade .

Enumerar por meio de uma coleção não é intrinsecamente um procedimento thread-safe. Mesmo quando uma coleção está sincronizada, outros threads ainda podem modificar a coleção, o que faz o enumerador lançar uma exceção. Para garantir thread-safe durante a enumeração, é possível bloquear a coleção durante toda a enumeração ou verificar as exceções resultantes das alterações feitas por outros threads.

Confira também