C# indexer
C# indexer
我們可能會拿一個 int 來做 bitwise 的判斷,在 32 bits 電腦上,就可以有 32 個 bool 值。然而,像以下的 expression:
(value & (1 << 6)) != 0
在程式中總是比較不友善。如果我們能夠像 array 一樣使用 [] 來操作 int,程式就會很清楚明瞭。這就是 indexer。在使用 indexer 的情況下,我們要存取 index 6 的元素,只要:
value[6]
就可以達到了。
以下定義一個 indexer:
struct IntBits
{
...
public bool this [ int index ]
{
get { return (bits & (1 << index) != 0; }
set
{
if (value) bits |= (1 << index);
else bits &= ~(1 << index);
}
}
}
indexer 並非一個 method,它使用 this 這個關鍵字。而 value 代表設定進 indexer 的值。與 array 不同,indexer 不只限於使用 int 當作索引值。它也可以類似 hash 這樣使用字串當索引值。在 indexer 中的 get/set 會由 compiler 自行判斷。像
bits[6] = 1;
就是 set。而
bool i = bits[6];
就是 get。
我們可能會拿一個 int 來做 bitwise 的判斷,在 32 bits 電腦上,就可以有 32 個 bool 值。然而,像以下的 expression:
(value & (1 << 6)) != 0
在程式中總是比較不友善。如果我們能夠像 array 一樣使用 [] 來操作 int,程式就會很清楚明瞭。這就是 indexer。在使用 indexer 的情況下,我們要存取 index 6 的元素,只要:
value[6]
就可以達到了。
以下定義一個 indexer:
struct IntBits
{
...
public bool this [ int index ]
{
get { return (bits & (1 << index) != 0; }
set
{
if (value) bits |= (1 << index);
else bits &= ~(1 << index);
}
}
}
indexer 並非一個 method,它使用 this 這個關鍵字。而 value 代表設定進 indexer 的值。與 array 不同,indexer 不只限於使用 int 當作索引值。它也可以類似 hash 這樣使用字串當索引值。在 indexer 中的 get/set 會由 compiler 自行判斷。像
bits[6] = 1;
就是 set。而
bool i = bits[6];
就是 get。
留言
張貼留言