日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 索引器使用总结

發布時間:2025/3/21 C# 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 索引器使用总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、索引器(Indexer):

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

最簡單的索引器的使用?
代碼如下:

? ? /// <summary>
? ? /// 最簡單的索引器
? ? /// </summary>
? ? public class IDXer
? ? {
? ? ? ? private string[] name=new string[10];

? ? ? ? //索引器必須以this關鍵字定義,其實這個this就是類實例化之后的對象
? ? ? ? public string this[int index]
? ? ? ? {
? ? ? ? ? ? get?
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return name[index];
? ? ? ? ? ? }
? ? ? ? ? ? set
? ? ? ? ? ? {
? ? ? ? ? ? ? ? name[index] = value;
? ? ? ? ? ? }
? ? ? ? } ?
? ? }

? ? public class Program
? ? {
? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? //最簡單索引器的使用 ? ? ? ? ??
? ? ? ? ? ? IDXer indexer = new IDXer();
? ? ? ? ? ? //“=”號右邊對索引器賦值,其實就是調用其set方法
? ? ? ? ? ? indexer[0] = "張三";
? ? ? ? ? ? indexer[1] = "李四";
? ? ? ? ? ? //輸出索引器的值,其實就是調用其get方法
? ? ? ? ? ? Console.WriteLine(indexer[0]);
? ? ? ? ? ? Console.WriteLine(indexer[1]);
? ? ? ? ? ? Console.ReadKey();
? ? ? ? }
? ? }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2、索引器與數組的區別:

索引器的索引值(Index)類型不限定為整數:?
用來訪問數組的索引值(Index)一定為整數,而索引器的索引值類型可以定義為其他類型。

索引器允許重載?
一個類不限定為只能定義一個索引器,只要索引器的函數簽名不同,就可以定義多個索引器,可以重載它的功能。

索引器不是一個變量?
索引器沒有直接定義數據存儲的地方,而數組有。索引器具有Get和Set訪問器。

3、索引器與屬性的區別:

索引器以函數簽名方式 this 來標識,而屬性采用名稱來標識,名稱可以任意?
索引器可以重載,而屬性不能重載。?
索引器不能用static 來進行聲明,而屬性可以。索引器永遠屬于實例成員,因此不能聲明為static。

以字符串作為下標,對索引器進行存取:

? ? //以字符串為下標的索引器
? ? public class IDXer2
? ? {
? ? ? ? private Hashtable name = new Hashtable();

? ? ? ? //以字符串為下標的索引器
? ? ? ? public string this[string index]
? ? ? ? {
? ? ? ? ? ? get
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return name[index].ToString();
? ? ? ? ? ? }
? ? ? ? ? ? set
? ? ? ? ? ? {
? ? ? ? ? ? ? ? name.Add(index, value);
? ? ? ? ? ? }
? ? ? ? }?
? ? }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Program
{
? ? static void Main(string[] args)
? ? {
? ? ? ? //以字符串為下標的索引器
? ? ? ? IDXer2 indexer2 = new IDXer2();
? ? ? ? indexer2["A01"] = "張三";
? ? ? ? indexer2["A02"] = "李四";
? ? ? ? Console.WriteLine(indexer2["A01"]);
? ? ? ? Console.WriteLine(indexer2["A02"]);
? ? ? ? Console.ReadKey();
? ? }
1
2
3
4
5
6
7
8
9
10
11
12
}

多參數索引器及索引器的重載

? ? /// <summary>
? ? /// 成績類
? ? /// </summary>
? ? public class Scores
? ? {
? ? ? ? /// <summary>
? ? ? ? /// 學生姓名
? ? ? ? /// </summary>
? ? ? ? public string StuName { get; set; }

? ? ? ? /// <summary>
? ? ? ? /// 課程ID
? ? ? ? /// </summary>
? ? ? ? public int CourseId { get; set; }

? ? ? ? /// <summary>
? ? ? ? /// 分數
? ? ? ? /// </summary>
? ? ? ? public int Score { get; set; }

? ? }

? ? /// <summary>
? ? /// 查找成績類(索引器)
? ? /// </summary>
? ? public class FindScore
? ? {
? ? ? ? private List<Scores> listScores;

? ? ? ? public FindScore()
? ? ? ? {
? ? ? ? ? ? listScores = new List<Scores>();
? ? ? ? }

? ? ? ? //索引器 通過名字&課程編號查找和保存成績
? ? ? ? public int this[string stuName, int courseId]
? ? ? ? {
? ? ? ? ? ? get
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Scores s = listScores.Find(x => x.StuName == stuName && x.CourseId == courseId);
? ? ? ? ? ? ? ? if (s != null)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? return s.Score;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? return -1;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? set
? ? ? ? ? ? {
? ? ? ? ? ? ? ? listScores.Add(new Scores() { StuName = stuName, CourseId = courseId, Score = value });
? ? ? ? ? ? }
? ? ? ? }

? ? ? ? //索引器重載,根據名字查找所有成績
? ? ? ? public List<Scores> this[string stuName]
? ? ? ? {
? ? ? ? ? ? get
? ? ? ? ? ? {
? ? ? ? ? ? ? ? List<Scores> tempList = listScores.FindAll(x => x.StuName == stuName);
? ? ? ? ? ? ? ? return tempList;
? ? ? ? ? ? }
? ? ? ? }
? ? }

? ?static void Main(string[] args)
? ?{
? ? ? ?//多參數索引器和索引器重載 ? ? ? ? ?
? ? ? ?FindScore fScore = new FindScore();
? ? ? ?fScore["張三", 1] = 98;
? ? ? ?fScore["張三", 2] = 100;
? ? ? ?fScore["張三", 3] = 95;
? ? ? ?fScore["李四", 1] = 96;
? ? ? ?//查找 張三 課程編號2 的成績
? ? ? ?Console.WriteLine("李四 課程編號2 成績為:" + fScore["李四", 1]);
? ? ? ?//查找所有張三的成績
? ? ? ?List<Scores> listScores = fScore["張三"];
? ? ? ?if (listScores.Count > 0)
? ? ? ?{
? ? ? ? ? foreach (Scores s in listScores)
? ? ? ? ? {
? ? ? ? ? ? ?Console.WriteLine(string.Format("張三 課程編號{0} 成績為:{1}", s.CourseId, s.Score));
? ? ? ? ? }
? ? ? ?}
? ? ? ?else
? ? ? ?{
? ? ? ? ? ?Console.WriteLine("無該學生成績單");
? ? ? ?}
? ? ? ?Console.ReadKey();
? ?}
---------------------?
作者:望崖?
來源:CSDN?
原文:https://blog.csdn.net/kingscoming/article/details/78847060?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的C# 索引器使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。