?? 含參屬性(索引器).txt
字號:
含參屬性:接收一個或者多個參數屬性.
類似數組的語法來訪問。this[]
1.查看.NET文檔時以查找我為Item的屬性來判斷是否支持索引器
using System;
using System.Collections;
namespace TestIndex
{
/// <summary>
/// Class1 的摘要說明。
/// </summary>
class Class1
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
SortedList mysort=new SortedList();
mysort.Add("ge",30);
mysort.Add("hu",28);
mysort.Add("chi",25);
//支持索引器,文檔中SortedList有Item屬性
Console.WriteLine(mysort["hu"].ToString());
//迭代輸出(通常)
for ( int i = 0; i < mysort.Count; i++ )
{
Console.WriteLine( "\t{0}:\t{1}", mysort.GetKey(i), mysort.GetByIndex(i) );
}
}
}
}
2.索引器實現的一個例子
using System;
namespace Movecont
{
public class BitArray
{
private Byte[]byteArray;
private Int32 numBits;
public BitArray(Int32 numBits)
{
if(numBits<=0)
throw new ArgumentOutOfRangeException("numBits","numBits must be>0");
this.numBits=numBits;
byteArray=new Byte[(numBits+7)/8];
}
public Boolean this[Int32 bitPos]
{
get
{
if((bitPos<0)||(bitPos>=numBits))
throw new IndexOutOfRangeException();
return (byteArray[bitPos/8]&(1<<(bitPos%8)))!=0;
}
set
{
if((bitPos<0)||(bitPos>=numBits))
throw new IndexOutOfRangeException();
if(value)
{
byteArray[bitPos/8]=(Byte)(byteArray[bitPos/8]|(1<<(bitPos%8)));
}
else
{
byteArray[bitPos/8]=(Byte)(byteArray[bitPos/8]&~(1<<(bitPos%8)));
}
}
}
}
class App
{
static void Main()
{
BitArray ba=new BitArray(14);
for(Int32 x=0;x<14;x++)
ba[x]=(x%2==0);
for(Int32 x=0;x<14;x++)
Console.WriteLine("Bit "+x+" is "+(ba[x]?"On":"Off"));
}
}
}
3.改變編譯器產生的名稱,讓其它語言訪問
[System.Runtime.CompilerServices.IndexerName("Bit")]
public Boolean this[Int32 bitPos]
{
VB
Dima ba As New BitArray(10)
Console.WriteLine(ba(2));
Console.WriteLine(ba.Bit(2)); //通過名稱訪問
4.System.String類型就是一個改變索引器名稱的例子Chars,而非Item
string s="gelifeng";
Console.WriteLine(s[1].ToString());
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -