次の方法で共有


NameObjectCollectionBase.IsReadOnly プロパティ

NameObjectCollectionBase インスタンスが読み取り専用かどうかを示す値を取得または設定します。

Protected Property IsReadOnly As Boolean
[C#]
protected bool IsReadOnly {get; set;}
[C++]
protected: __property bool get_IsReadOnly();protected: __property void set_IsReadOnly(bool);
[JScript]
protected function get IsReadOnly() : Boolean;protected function set IsReadOnly(Boolean);

プロパティ値

NameObjectCollectionBase インスタンスが読み取り専用の場合は true 。それ以外の場合は false

解説

読み取り専用のコレクションでは、コレクション作成後に要素の追加、削除、または変更はできません。

読み取り専用のコレクションは、コレクションの変更を防ぐラッパーがコレクションに組み込まれているに過ぎません。したがって、基になっているコレクションで変更が加えられた場合、読み取り専用のコレクションでもその内容が反映されます。

使用例

[Visual Basic, C#, C++] 読み取り専用のコレクションを作成する方法については、次のコード例を参照してください。

 
Imports System
Imports System.Collections
Imports System.Collections.Specialized

Public Class MyCollection
   Inherits NameObjectCollectionBase

   Private _de As New DictionaryEntry()

   ' Gets a key-and-value pair (DictionaryEntry) using an index.
   Default Public ReadOnly Property Item(index As Integer) As DictionaryEntry
      Get
         _de.Key = Me.BaseGetKey(index)
         _de.Value = Me.BaseGet(index)
         Return _de
      End Get
   End Property

   ' Adds elements from an IDictionary into the new collection.
   Public Sub New(d As IDictionary, bReadOnly As [Boolean])
      Dim de As DictionaryEntry
      For Each de In  d
         Me.BaseAdd(CType(de.Key, [String]), de.Value)
      Next de
      Me.IsReadOnly = bReadOnly
   End Sub 'New

   ' Adds an entry to the collection.
   Public Sub Add(key As [String], value As [Object])
      Me.BaseAdd(key, value)
   End Sub 'Add

End Class 'MyCollection


Public Class SamplesNameObjectCollectionBase   

   Public Shared Sub Main()

      ' Creates and initializes a new MyCollection that is read-only.
      Dim d = New ListDictionary()
      d.Add("red", "apple")
      d.Add("yellow", "banana")
      d.Add("green", "pear")
      Dim myROCol As New MyCollection(d, True)

      ' Tries to add a new item.
      Try
         myROCol.Add("blue", "sky")
      Catch e As NotSupportedException
         Console.WriteLine(e.ToString())
      End Try

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

   End Sub 'Main

   Public Shared Sub PrintKeysAndValues(myCol As MyCollection)
      Dim i As Integer
      For i = 0 To myCol.Count - 1
         Console.WriteLine("[{0}] : {1}, {2}", i, myCol(i).Key, myCol(i).Value)
      Next i
   End Sub 'PrintKeysAndValues

End Class 'SamplesNameObjectCollectionBase 


'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


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

public class MyCollection : NameObjectCollectionBase  {

   private DictionaryEntry _de = new DictionaryEntry();

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

   // 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;
   }

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

}

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

   }

   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 );
      }
   }

}


/*
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

*/

[C++] 
#using <mscorlib.dll>
#using <system.dll>

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Specialized;

public __gc class MyCollection : public NameObjectCollectionBase
{
private:
   DictionaryEntry _de;

public:
   // Gets a key-and-value pair (DictionaryEntry) using an index.
   __property DictionaryEntry get_Item( int index )
   {
      _de.Key = this->BaseGetKey(index);
      _de.Value = this->BaseGet(index);
      return(_de);
   }

   // Adds elements from an IDictionary into the new collection.
   MyCollection(IDictionary* d, Boolean bReadOnly)
   {
      IEnumerator* myEnum = d->GetEnumerator();
      while (myEnum->MoveNext())
      {
         DictionaryEntry* de = __try_cast<DictionaryEntry*>(myEnum->Current);
         this->BaseAdd(__try_cast<String*>(de->Key), de->Value);
      }
      this->IsReadOnly = bReadOnly;
   }

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

};

void PrintKeysAndValues(MyCollection* myCol) {
   for (int i = 0; i < myCol->Count; i++) {
      Console::WriteLine(S"[{0}] : {1}, {2}", __box(i), myCol->Item[i].Key, myCol->Item[i].Value);
   }
}

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

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

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

}

/*
This code produces the following output.

System.NotSupportedException: Collection is read-only.
   at System.Collections.Specialized.NameObjectCollectionBase.BaseAdd(String name, Object value)
   at main()
Read-Only Collection:
[0] : red, apple
[1] : yellow, banana
[2] : green, pear
*/

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

参照

NameObjectCollectionBase クラス | NameObjectCollectionBase メンバ | System.Collections.Specialized 名前空間