博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
索引器
阅读量:6295 次
发布时间:2019-06-22

本文共 3028 字,大约阅读时间需要 10 分钟。

msdn介绍的比较详细:
索引器 (indexer)
索引器允许类或结构的实例按照与相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。它可以使得像那样对对象使用下标。它提供了通过索引方式方便地访问类的数据信息的方法。
1.C#中的类成员可以是任意类型,包括数组和集合。
      当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作。
2.索引器类型表示该索引器使用哪一类型的索引来存取数组或集合元素,可以是整数,可以是字符串;
3.this表示操作本对象的数组或集合成员,可以简单把它理解成索引器的名字因此索引器不能具有用户定义的名称
4.类对象[index] 就可以操作类中的数组或结构,index可以是int,或者string
5.如果类中有多个数组和结果呢????会提示对象不明确,貌似还不能这样用
要声明类或结构上的索引器,请使用this,例如:
public int this[int index] //声明索引器
{
// get and set 访问
}
索引器的有:new、public、protected、internal、private、virtual、sealed、override、abstract和extern。
当索引器声明包含extern时,称该索引器为外部索引器。因为外部索引器声明不提供任何实际的实现,所以它的每个访问器声明都由一个分号组成。
索引器的签名由其的数量和类型组成。它不包括索引器类型或名。如果在同一类中声明一个以上的索引器,则它们必须具有不同的签名。
索引器值不归类为;因此,不能将索引器值作为ref或out参数来传递。
索引必须是实例成员。
使用方法一:范型类
下面用一个例子来说明如何声明和使用索引器。
在本示例中,定义了一个 类,并为其提供了简单的get和set访问器方法(作为分配和检索值的方法)。Program 类为存储字符串创建了此类的一个实例。代码如下:
  //声明一个范型类    class SampleCollectionUsingIndexor
    {        private T[] array = new T[100];        public T this[int i]        {            get { return array[i]; }            set { array[i] = value; }        }    }
 
下面是如何使用上述代码实现的索引器,具体代码示例如下:
   SampleCollectionUsingIndexor
 indexor = new SampleCollectionUsingIndexor
();   indexor[1] = "nnime";  Console.WriteLine(indexor[1].ToString()); 方法二:在一般类中声明数组
  class commonClass    {        string[] stringArray=new string[100];         public string this[int i]        {            set {                if (i < 0 || i > 100)                { }                else                     stringArray[i] = value;             }            get {                if (i < 0 || i > 100)                {                    return "illegal";                }                return stringArray[i]; }                }     }
调用方法:
  commonClass common = new commonClass();  common[1] = "sfjsf";  Console.WriteLine(common[1]);  Console.WriteLine(common[1000]);  Console.ReadKey();
方法三:用字符串作为下标
C# 并不将索引类型限制为整数。例如,对索引器使用字符串可能是有用的。通过搜索集合内的字符串并返回相应的值,可以实现此类的索引器。由于访问器可被重载,字符串和整数版本可以共存。
在此例中,声明了存储星期几的类。声明了一个
get 访问器,它接受字符串(天名称),并返回相应的整数。例如,星期日将返回 0,星期一将返回 1,等等。
// Using a string as an indexer value
class DayCollection
{
   
string[] days = {
"Sun",
"Mon",
"Tues",
"Wed",
"Thurs",
"Fri",
"Sat" };
   
// This method finds the day or returns -1
   
private
int GetDay(
string testDay)
    {
       
int i = 0;
       
foreach (
string day
in days)
        {
           
if (day == testDay)
            {
               
return i;
            }
            i++;
        }
       
return -1;
    }
   
// The get accessor returns an integer for a given string
   
public
int
this[
string day]
    {
       
get
        {
           
return (GetDay(day));
        }
    }
}
class Program
{
   
static
void Main(
string[] args)
    {
        DayCollection week =
new DayCollection();
        System.Console.WriteLine(week[
"Fri"]);
        System.Console.WriteLine(week[
"Made-up Day"]);
    }
}
 
索引器和属性比较

属性

索引器

允许像调用公共数据成员一样调用方法。

允许对一个对象本身使用数组表示法来访问该对象内部集合中的元素。

可通过简单的名称进行访问。

可通过索引器进行访问。

可以为静态成员或实例成员。

必须为实例成员。

属性的 访问器没有参数。

索引器的 get 访问器具有与索引器相同的形参表。

属性的 访问器包含隐式 value 参数。

除了参数外,索引器的 set 访问器还具有与索引器相同的形参表。

支持对使用短语法。

不支持短语法。

总结:说了这么多,总结一句:索引器可以通过类名对象加索引号(object[index])访问类中的数组和结构,方便快捷

转载于:https://www.cnblogs.com/fjsnail/p/3231953.html

你可能感兴趣的文章
css中.和#的区别 不写时代表什么
查看>>
elementui tree组件层级过多时可左右滚动
查看>>
elementui select组件选中后无法自动刷新更新值渲染到页面中
查看>>
IO之文件读写
查看>>
MongoDB副本集
查看>>
qt实现-给SQLITE添加自定义函数
查看>>
[Spring MVC起步]我的第一个MVC
查看>>
C语言中使用MySQL(Linux下)
查看>>
ServiceHot告诉你美国的程序员们各编程语言薪资情况
查看>>
js数组中forEach/some/every/map/filter/reduce的区别
查看>>
HBase–常用API操作篇
查看>>
USACO 1.0_Friday the Thirteenth
查看>>
内存是新的硬盘,硬盘是新的磁带
查看>>
安装gitblit
查看>>
Android Java虚拟机拦截技术分析
查看>>
第五章 深入理解Magento – Magento资源配置
查看>>
最近喜欢用markdown写笔记,贴个语法说明
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Golang gRPC实践 连载六 内置Trace
查看>>