先决条件:C#中的属性
索引器允许将类或结构的实例索引为数组。如果用户将为类定义索引器,则该类的行为将类似于虚拟数组。数组访问运算符(即[[] )用于访问使用索引器的类的实例。用户可以检索或设置索引值,而无需指向实例或类型成员。索引器几乎类似于“属性” 。索引器和属性之间的主要区别在于,索引器的访问器将使用参数。
句法:
[access_modifier] [return_type] this [argument_list]
{
get
{
// get block code
}
set
{
// set block code
}
}
在以上语法中:
- access_modifier:它可以是公共的,私有的,受保护的或内部的。
- return_type:可以是任何有效的C#类型。
- this:是指向当前类对象的关键字。
- arguments_list:这指定索引器的参数列表。
- get {}和set {}:这些是访问器。
例子:
C#
// C# program to illustrate the Indexer
using System;
// class declaration
class IndexerCreation
{
// class members
private string[] val = new string[3];
// Indexer declaration
// public - access modifier
// string - the return type of the Indexer
// this - is the keyword having a parameters list
public string this[int index]
{
// get Accessor
// retrieving the values
// stored in val[] array
// of strings
get
{
return val[index];
}
// set Accessor
// setting the value at
// passed index of val
set
{
// value keyword is used
// to define the value
// being assigned by the
// set indexer.
val[index] = value;
}
}
}
// Driver Class
class main {
// Main Method
public static void Main() {
// creating an object of parent class which
// acts as primary address for using Indexer
IndexerCreation ic = new IndexerCreation();
// Inserting values in ic[]
// Here we are using the object
// of class as an array
ic[0] = "C";
ic[1] = "CPP";
ic[2] = "CSHARP";
Console.Write("Printing values stored in objects used as arrays\n");
// printing values
Console.WriteLine("First value = {0}", ic[0]);
Console.WriteLine("Second value = {0}", ic[1]);
Console.WriteLine("Third value = {0}", ic[2]);
}
}
输出:
Printing values stored in objects used as arrays
First value = C
Second value = CPP
Third value = CSHARP
关于索引器的要点:
- 索引器有两种类型,即一维索引器和多维索引器。上面讨论的是一维索引器。
- 索引器可能会超载。
- 这些与Properties不同。
- 这使对象可以以类似于数组的方式被索引。
- set访问器将始终分配值,而get访问器将返回值。
- “ this ”关键字始终用于声明索引器。
- 要定义由设置的索引器分配的值,请使用“ value ”关键字。
- 索引器在C#中也称为智能数组或参数化属性。
- 索引器不能是静态成员,因为它是类的实例成员。