はじめに †
ICollectionインターフェイス †
interface System.Collections.ICollection
{
int Count { get; } // 格納されている要素の数
bool IsSynchronized{ get; } // スレッドセーフであるかどうかを示す値。
Object SyncRoot{ get; } // このメソッドで返すオブジェクトを使用してコレクションと同期を取る。
void CopyTo(Array a, int index); // 指定したインデックスから要素を配列にコピーする。
}
- IsSynchronized?, SyncRoot?はよく分からなかった。
- ICollectionはIEnumerableインターフェイスを継承しているため、GetEnumerator?()メソッドも実装しなくてはならない。
コード †
class MyCollection : System.Collections.ICollection
{
private int[] array = { 10, 20, 30 };
private int count;
public MyCollection()
{
this.count = 3;
}
/// Count
public int Count
{
get { return this.count; }
}
/// IsSynchronized
public bool IsSynchronized
{
get { return false; } // 実際のところよく分からない。
}
/// SyncRoot
public Object SyncRoot
{
get { return this; } // 実際のところよく分からない。
}
/// CopyTo
public void CopyTo(Array a, int index)
{
foreach (int i in this.array)
{
a.SetValue(i, index);
index++;
}
}
/// GetEnumerator
public System.Collections.IEnumerator GetEnumerator()
{
return null; // ここでは内容は実装してないです。
}
}
- 内容的にArrayをラップしてるだけにしか見えないけど、とりあえず。
利用例 †
コード †
MyCollection collection = new MyCollection();
int[] a1 = { 1, 2, 3, 4, 5};
collection.CopyTo(a1, 0);
foreach (int x in a1)
{
Console.WriteLine(x);
}
出力 †
10
20
30
4
5
- このページの例ではCopyTo?くらいしか実装してないからこんなところで。(Countはともかく)
- GetEnumerator?も実装すればforeachとかも使えるようになるでしょう。
- IsSynchronized?, SyncRoot?はよく分からない。
参考リンク †
最新の20件
2015-05-15
2014-12-07
2008-11-17
2007-08-30
2007-04-21
2007-03-13
2007-03-12
2007-02-20
2007-02-14
2007-02-04
2006-11-26
2006-11-23
2006-11-20
2006-11-18
2006-11-13
- counter: 368
- today: 1
- yesterday: 0
- online: 1