索引器(indexer)是一种特殊的类方法 ,允许使用一个看起来像获取数组元素一样的方法来访问类的内部数据 。下面使用BitList类来演示 indexer的简单用法 。
在BitList类中 ,索引器返回 number 域 第 i 个比特位(bit)的值 。
public class BitList
{
private BitList()
{
}
private static BitList instance;
//获取单实例
public static BitList GetInstance()
{
if (instance == null)
{
instance = new BitList();
}
return instance;
}
private int number = 0;
public int Number
{
get { return number; }
set { number = value; }
}
//一个所索引器
//返回一个比特位的值
public int this[int index]
{
get
{
int val = Number >> index;
return val & 1;
}
}
}
设计一个简单的窗体 :
TextBox txtNumber;//用来输入number
NumbericUpDown numUD;//获取index
ListBox lsBits;//显示number 域 第 index 个比特位的值
public partial class FrmBitList : Form
{
public FrmBitList()
{
InitializeComponent();
}
private void numUD_ValueChanged(object sender, EventArgs e)
{
if (this.txtNumber.Text.Length < 1)
{
return;
}
//从调节钮控件中获取索引值
int index =(int)this.numUD.Value;
if (index == -1)
{
return;
}
//通过BitList的索引器获取bit值
int bit = BitList.GetInstance()[index];
lsBits.Items.Add(bit.ToString());
}
private void txtNumber_KeyPress(object sender, KeyPressEventArgs e)
{
//设置KeyPress事件已经处理过
e.Handled = true;
//只能输入数字 和 BackSpace
if (e.KeyChar >= '0' && e.KeyChar <= '9' || e.KeyChar == '\b')
{
e.Handled = false;
}
}
private void txtNumber_TextChanged(object sender, EventArgs e)
{
//更新BitList中的属性Number
if (txtNumber.Text.Length < 1)
{
BitList.GetInstance().Number = 0;
}
else
{
BitList.GetInstance().Number = Convert.ToInt32(txtNumber .Text);
}
this.numUD.Value = -1;//复位
this.lsBits.Items.Clear();//清空
}
}
运行效果: