以下範例展示索引器如何為使用者提供友善介面,同時大幅降低儲存空間成本。
using System;
class BitArray
{
int[] bits;
int length;
public BitArray(int length)
{
if (length < 0) throw new ArgumentException();
bits = new int[((length - 1) >> 5) + 1]; // 每 32 位用一個 int 儲存
this.length = length;
}
public int Length { get { return length; } }
public bool this[int index]
{
get
{
if (index < 0 || index >= length) throw new IndexOutOfRangeException();
return (bits[index >> 5] & 1 << index) != 0;
}
set
{
if (index < 0 || index >= length) throw new IndexOutOfRangeException();
if (value) bits[index >> 5] |= 1 << index;
else bits[index >> 5] &= ~(1 << index);
}
}
}
class Test
{
static void Main()
{
BitArray Bits = new BitArray(10);
for (int i = 0; i < 10; i++) Bits[i] = (i % 2) == 0;
for (int i = 0; i < 10; i++) Console.Write(Bits[i] + " ");
}
}
輸出:True False True False True False True False True False
int[] 內部儲存,每個 int (32 位) 容納 32 個布林值,空間效率極高。this[int index] 提供類陣列存取介面:Bits[i] = true/false、bool b = Bits[i]。get 透過位元運算 (bits[index >> 5] & 1 << index) != 0 讀取指定位元。set 透過 |= 設定位元、&= ~() 清除位元。