亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

C#索引器

系統 2860 0

索引器概述

索引器使得對象可按照與數組相似的方法進行索引。

get 訪問器返回值。set 訪問器分配值。

this 關鍵字用于定義索引器。

value 關鍵字用于定義由 set 索引器分配的值。

索引器不必根據整數值進行索引,由您決定如何定義特定的查找機制。

索引器可被重載。

索引器可以有多個形參,例如當訪問二維數組時。

C#語言一個最令人感興趣的地方就是類的索引器(indexer)。簡單說來,所謂索引器就是一類特殊的屬性,通過它們你就可以像引用數組一樣引用 自己的類。顯然,這一功能在創建集合類的場合特別有用,而在其他某些情況下,比如處理大型文件或者抽象某些有限資源等,能讓類具有類似數組的行為當然也是 非常有用的。本文就會引領你設置類來采用索引器。但是,首先讓我們概述下屬性這個概念以便了解些必要的背景知識。

屬性

  假如你曾經用VB6編寫過程序,那么你應該很熟悉屬性方法才對,所謂屬性方法其實就是特殊的類成員,它實現了對私有類域的受控訪問。在C#語言 中有兩種屬性方法,其一是get,通過它可以返回私有域的值,其二是set,通過它就可以設置私有域的值。比如說,以下面的代碼為例,其間創建了一個 FirstName屬性,由它控制對私有類成員firstname的訪問:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> class Person
{
private string firstname;
public string FirstName
{
get { return firstname;}
set {firstname = value;}
}
}

屬性聲明可以如下編碼:
Person p = new Person();
p.FirstName = "Lamont";
Console.WriteLine (p.FirstName);

如你你所 看到的那樣,屬性聲明倒更像是域聲明,只不過它還聲明了兩個特殊的成員,按照微軟的說法就是所謂的訪問函數(accessor)。當某一表達式的右邊調用 屬性或者屬性用作其他子程序(或者函數)的參數時即會調用get訪問函數。反之,當表達式左邊調用屬性并且通過隱式傳遞value參數設置私有域值的情況 下就會調用set訪問函數。你可以創建只讀屬性,方法是省略set訪問函數,這樣任何設置屬性的嘗試都會產生編譯錯誤。

采用索引器的益處

  說了半天咱們轉到正題上來,那么為什么我要兜這個圈子呢?其實,這是因為類的索引器非常像屬性,從代碼上看也是這樣。以下是具有索引器的類示例,通過索引器會返回一個字符串:
class Sample
{
public string this [ int index]
{
get { return " Youpassed " + index;}
}
}

注 意,這里的屬性名是this,意思是回引類的當前實例,參數列表包含在方括號而非括號之內。還有,這是一個只讀索引器。為了把它改成讀/寫類型,我又添加 了一個set訪問函數。在定義索引器的時候,你不一定只采用一個參數。索引器參數可以采用任何類型,不過int是通常采用也是最為合理的類型。同一類中還 可能擁有一個以上的索引器(重載)。

  如上定義了Sample類之后,我們就可以把索引器用作某種默認的屬性,如下所示:

Sample s = new Sample();
Console.WriteLine(s[55]);

屬性和索引器

   屬性和索引器之間有好些差別:

  類的每一個屬性都必須擁有唯一的名稱,而類里定義的每一個索引器都必須擁有唯一的簽名(signature)或者參數列表(這樣就可以實現索引器重載)。

   屬性可以是static(靜態的)而索引器則必須是實例成員。

  為索引器定義的訪問函數可以訪問傳遞給索引器的參數,而屬性訪問函數則沒有參數。

接口

  類似數組的行為常受到程序實現者的喜愛,所以你還可以為接口定義索引器,IList和 IDictionary集合接口都聲明了索引器以便訪問其存儲的項目。

  在為接口聲明索引器的時候,記住聲明只是表示索引器的存在。你只需要提供恰當的訪問函數即可,不必包括范圍修飾符。以下代碼把索引器聲明為接口IImplementMe的一部分:

interface IImplementMe
{
string this [ int index]
{
get ;
set ;
}
}

相應實現的類則必須為IimplementMe的索引器具體定義get和set訪問函數。

  以上就是有關索引器的一些基本概述了。現在你應該對索引器在你的開發中所具有的作用有了較深入的了解。

索引器允許類或結構的實例按照與數組相同的方式進行索引。索引器類似于屬性,不同之處在于它們的訪問器采用參數。

在下面的示例中,定義了一個泛型類,并為其提供了簡單的 get 和 set 訪問器方法(作為分配和檢索值的方法)。Program 類為存儲字符串創建了此類的一個實例。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> class SampleCollection < T >
{
private T[]arr = new T[ 100 ];
public T this [ int i]
{
get
{
return arr[i];
}
set
{
arr[i]
= value;
}
}
}

// Thisclassshowshowclientcodeusestheindexer
class Program
{
static void Main( string []args)
{
SampleCollection
< string > stringCollection = new SampleCollection < string > ();
stringCollection[
0 ] = " Hello,World " ;
System.Console.WriteLine(stringCollection[
0 ]);
}
}


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> /*
*另一個例子,索引器中調用了私有方法.
*說明
*在此例中,聲明了存儲星期幾的類。聲明了一個get訪問器,它接受字符串(天名稱),
*并返回相應的整數。例如,星期日將返回0,星期一將返回1,等等。
*
*
*/
using System;
class DayCollection
{
string []days = { " Sun " , " Mon " , " Tues " , " Wed " , " Thurs " , " Fri " , " Sat " };

// Thismethodfindsthedayorreturns-1
private int GetDay( string testDay)
{
int i = 0 ;
foreach ( string day in days)
{
if (day == testDay)
{
return i;
}
i
++ ;
}
return - 1 ;
}

// Thegetaccessorreturnsanintegerforagivenstring
// 索引器里調用了私的方法.
public int this [ string day]
{
get
{
return (GetDay(day));
}
}
}

class Program
{
static void Main()
{
DayCollectionweek
= new DayCollection();
System.Console.WriteLine(week[
" Fri " ]);
System.Console.WriteLine(week[
" Made-upDay " ]);
}
}

C#索引器


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 曰本女人一级毛片看一级毛 | 欧美色视频在线观看 | 久久综合精品国产一区二区三区 | 伊人色网站 | 成人私人影院在线版 | 久热re国产手机在线观看 | 亚洲日本一区二区三区高清在线 | 久久精品国产一区二区三区 | 西西亚洲| 国产亚洲精品一区久久 | 免费h片网站 | 人人爰人人人人人鲁 | 狠狠综合久久久久尤物丿 | 七七七久久久久人综合 | 色网站在线 | 97免费视频在线观看 | 九九热综合 | 亚洲香蕉一区二区三区在线观看 | 国产不卡在线观看视频 | 精品二区| 色老头成人免费视频天天综合 | 成人合集大片bd高清在线观看 | 一级毛片牲交大片 | 久久99中文字幕伊人 | 日韩亚洲欧美在线观看 | 老师在办公室被躁到白浆 | 精品国产看高清国产毛片 | 91麻豆精品一二三区在线 | 欧美日韩在线成人免费 | 天天操天天爽天天射 | 一级a做爰片欧欧美毛片4 | 伊人热久久 | 欧美18videosex护士 | 手机看片一区 | 九九热这里只有 | 日韩在线一| 99re6这里有精品热视频在线 | 97精品在线视频 | 欧美日本一区二区 | 狠狠色噜噜狠狠狠狠69 | 亚洲精品综合网 |