NameObjectCollectionBase Klasa

Definicja

Udostępnia klasę abstract bazową dla kolekcji skojarzonych String kluczy i Object wartości, do których można uzyskać dostęp za pomocą klucza lub indeksu.

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
Dziedziczenie
NameObjectCollectionBase
Pochodne
Atrybuty
Implementuje

Przykłady

W poniższym przykładzie kodu pokazano, jak zaimplementować klasę i używać jej NameObjectCollectionBase .

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):

*/

Uwagi

Podstawową strukturą tej klasy jest tabela skrótów.

Każdy element jest parą klucz/wartość.

Pojemność elementu NameObjectCollectionBase to liczba elementów, które NameObjectCollectionBase może pomieścić. Ponieważ elementy są dodawane do elementu NameObjectCollectionBase, pojemność jest automatycznie zwiększana zgodnie z wymaganiami za pośrednictwem reallocation.

Dostawca kodu skrótu zwalnia kody skrótów dla kluczy w wystąpieniu NameObjectCollectionBase . Domyślnym dostawcą kodu skrótu CaseInsensitiveHashCodeProviderjest .

Porównanie określa, czy dwa klucze są równe. Domyślnym porównaniem CaseInsensitiveComparerjest .

W .NET Framework wersji 1.0 ta klasa używa porównań ciągów wrażliwych na kulturę. Jednak w .NET Framework wersji 1.1 lub nowszej ta klasa używa podczas CultureInfo.InvariantCulture porównywania ciągów. Aby uzyskać więcej informacji na temat wpływu kultury na porównania i sortowanie, zobacz Wykonywanie Culture-Insensitive operacje na ciągach.

null jest dozwolone jako klucz lub jako wartość.

Przestroga

Metoda BaseGet nie rozróżnia zwracanego klucza, ponieważ nie można odnaleźć null określonego klucza i null który jest zwracany, ponieważ wartość skojarzona z kluczem to null.

Konstruktory

NameObjectCollectionBase()

Inicjuje NameObjectCollectionBase nowe wystąpienie klasy, która jest pusta.

NameObjectCollectionBase(IEqualityComparer)

Inicjuje NameObjectCollectionBase nowe wystąpienie klasy, która jest pusta, ma domyślną pojemność początkową i używa określonego IEqualityComparer obiektu.

NameObjectCollectionBase(IHashCodeProvider, IComparer)
Przestarzałe.
Przestarzałe.

Inicjuje nowe wystąpienie NameObjectCollectionBase klasy, która jest pusta, ma domyślną pojemność początkową i używa określonego dostawcy kodu skrótu i określonego porównania.

NameObjectCollectionBase(Int32)

Inicjuje NameObjectCollectionBase nowe wystąpienie klasy, która jest pusta, ma określoną pojemność początkową i używa domyślnego dostawcy kodu skrótu i domyślnego porównania.

NameObjectCollectionBase(Int32, IEqualityComparer)

Inicjuje NameObjectCollectionBase nowe wystąpienie klasy, która jest pusta, ma określoną pojemność początkową i używa określonego IEqualityComparer obiektu.

NameObjectCollectionBase(Int32, IHashCodeProvider, IComparer)
Przestarzałe.
Przestarzałe.

Inicjuje nowe wystąpienie NameObjectCollectionBase klasy, która jest pusta, ma określoną pojemność początkową i używa określonego dostawcy kodu skrótu i określonego porównania.

NameObjectCollectionBase(SerializationInfo, StreamingContext)
Przestarzałe.

Inicjuje NameObjectCollectionBase nowe wystąpienie klasy, która można serializować i używa określonego parametru SerializationInfo i StreamingContext.

Właściwości

Count

Pobiera liczbę par klucz/wartość zawartych w wystąpieniu NameObjectCollectionBase .

IsReadOnly

Pobiera lub ustawia wartość wskazującą, czy NameObjectCollectionBase wystąpienie jest tylko do odczytu.

Keys

NameObjectCollectionBase.KeysCollection Pobiera wystąpienie zawierające wszystkie klucze w wystąpieniuNameObjectCollectionBase.

Metody

BaseAdd(String, Object)

Dodaje wpis z określonym kluczem i wartością NameObjectCollectionBase do wystąpienia.

BaseClear()

Usuwa wszystkie wpisy z NameObjectCollectionBase wystąpienia.

BaseGet(Int32)

Pobiera wartość wpisu w określonym indeksie NameObjectCollectionBase wystąpienia.

BaseGet(String)

Pobiera wartość pierwszego wpisu z określonym kluczem z NameObjectCollectionBase wystąpienia.

BaseGetAllKeys()

Zwraca tablicę zawierającą String wszystkie klucze w wystąpieniu NameObjectCollectionBase .

BaseGetAllValues()

Zwraca tablicę zawierającą Object wszystkie wartości w wystąpieniu NameObjectCollectionBase .

BaseGetAllValues(Type)

Zwraca tablicę określonego typu, która zawiera wszystkie wartości w wystąpieniu NameObjectCollectionBase .

BaseGetKey(Int32)

Pobiera klucz wpisu w określonym indeksie NameObjectCollectionBase wystąpienia.

BaseHasKeys()

Pobiera wartość wskazującą, czy NameObjectCollectionBase wystąpienie zawiera wpisy, których klucze nie nullsą .

BaseRemove(String)

Usuwa wpisy z określonym kluczem z NameObjectCollectionBase wystąpienia.

BaseRemoveAt(Int32)

Usuwa wpis w określonym indeksie NameObjectCollectionBase wystąpienia.

BaseSet(Int32, Object)

Ustawia wartość wpisu w określonym indeksie NameObjectCollectionBase wystąpienia.

BaseSet(String, Object)

Ustawia wartość pierwszego wpisu z określonym kluczem w wystąpieniu NameObjectCollectionBase , jeśli zostanie znaleziony. W przeciwnym razie dodaje wpis z określonym kluczem i wartością NameObjectCollectionBase do wystąpienia.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetEnumerator()

Zwraca moduł wyliczający, który iteruje za pomocą elementu NameObjectCollectionBase.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetObjectData(SerializationInfo, StreamingContext)
Przestarzałe.

Implementuje ISerializable interfejs i zwraca dane potrzebne do serializacji NameObjectCollectionBase wystąpienia.

GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
OnDeserialization(Object)

Implementuje ISerializable interfejs i zgłasza zdarzenie deserializacji po zakończeniu deserializacji.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

ICollection.CopyTo(Array, Int32)

Kopiuje całą NameObjectCollectionBase do zgodnej jednowymiarowej Arraytablicy, zaczynając od określonego indeksu tablicy docelowej.

ICollection.IsSynchronized

Pobiera wartość wskazującą, czy dostęp do NameObjectCollectionBase obiektu jest synchronizowany (bezpieczny wątek).

ICollection.SyncRoot

Pobiera obiekt, który może służyć do synchronizowania dostępu do NameObjectCollectionBase obiektu.

Metody rozszerzania

Cast<TResult>(IEnumerable)

Rzutuje elementy elementu IEnumerable do określonego typu.

OfType<TResult>(IEnumerable)

Filtruje elementy elementu IEnumerable na podstawie określonego typu.

AsParallel(IEnumerable)

Umożliwia równoległość zapytania.

AsQueryable(IEnumerable)

Konwertuje element IEnumerable na .IQueryable

Dotyczy

Produkt Wersje
.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

Bezpieczeństwo wątkowe

Publiczne statyczne (Shared w Visual Basic) elementy członkowskie tego typu są bezpieczne wątkami. Wystąpienia elementów członkowskich nie dają gwarancji bezpieczeństwa wątków.

Ta implementacja nie zapewnia zsynchronizowanej otoki (bezpiecznej wątku) dla klasy pochodnej NameObjectCollectionBase, ale klasy pochodne mogą tworzyć własne zsynchronizowane wersje NameObjectCollectionBase właściwości SyncRoot .

Wyliczanie przez kolekcję nie jest wewnętrznie bezpieczną procedurą wątku. Nawet gdy kolekcja jest synchronizowana, inne wątki nadal mogą ją modyfikować. Powoduje to zgłaszanie wyjątku przez moduł wyliczający. Aby zagwarantować bezpieczeństwo wątków podczas wyliczania, można zablokować kolekcję podczas całego procesu wyliczania albo rejestrować wyjątki wynikłe ze zmian wprowadzanych przez inne wątków.

Zobacz też