C#详细解释索引器中的索引器
索引:是C#引进的一种新型组员,它允许类或结构的案例以与二维数组相同的形式进行检索。
索引器的类型与特性不同,因为索引器的访问器选择了主要参数。
索引器重新定义后,可以像浏览二维数组一样应用[]操作符浏览成员。
定义索引器的方式与定义特性非常相似,一般形式如下:
[修饰符] 基本数据类型 this <[数据类型 标识符]>
{
get{//获取属性编码}
set{///设置属性编码}
}
索引器简介:
使用索引器可以使用类似于二维数组的方法来建立目标索引。
get accessor returns a value." data-guid=5e97def07fe15e931d526cafa5b9644get 浏览器传参。 set accessor assigns a value." data-guid=66b9777a805b510e697d60c805140aebset 浏览器分配值。 set accessor assigns a value." data-guid=66b9777a805b510e697d60c805140aebset 浏览器分配值。
this keyword is used to define the indexers." data-guid=c34f23e68daf27001397542591de397this 定义索引器的关键字。
value keyword is used to define the value being assigned by the set indexer." data-guid=599578d2a78092807c04f6ca2b0058value 定义原因的关键词 set 索引分配值。
索引器不需要根据整数金额进行检索,你可以决定如何确定特定的搜索系统。
可轻载索引器。
在浏览二维数组时,索引器可以有几个实参。
与索引器相比,属性:
get and set accessor methods as a means of assigning and retrieving values." data-guid=dd23dc334d63d8f7d007da625c804 在下面的例子中,它重新定义了一个泛型类,并为它提供了简单 get 和 set 浏览器模式(作为分配和搜索系数的方式)。 Program class creates an instance of this class for storing strings." data-guid=6dda503e5fad577a85f10e9f502a5c1Program 类为存储字符串数组创建此类案例。
class SampleCollection{ // Declare an array to store the data elements. private T[] arr = new T[100]; // Define the indexer, which will allow client code // to use [] notation on the class instance itself. // (See line 2 of code in Main below.) public T this[int i] { get { // This indexer is very simple, and just returns or sets // the corresponding element from the internal array. return arr[i]; } set { arr[i] = value; } } } // This class shows how client code uses the indexer. class Program { static void Main(string[] args) { // Declare an instance of the SampleCollection type. SampleCollection stringCollection = new SampleCollection (); // Use [] notation on the type. stringCollection[0] = "Hello, World"; System.Console.WriteLine(stringCollection[0]); } }
插座中的索引器:
interface (C# Reference)." data-guid=“9d8d9a82cf82d740176b0fc9dbd9f72”>索引器可以从插口上说明。 class indexers in the following ways:" data-guid=“6f6a5a1638e327697f0db85ba767e0”>插口索引器的访问器与类索引器的访问设备有以下区别:
插入式浏览器不能使用修饰符。
插座浏览器没有身体。
插座浏览器没有身体。
因此,浏览器的用途是标记索引器是读写能力、写保护还是只写。
以下是插入索引器浏览装置的例子:
public interface ISomeInterface
{
//...
// Indexer declaration:
string this[int index]
{
get;
set;
}
索引器的签名必须不同于同一插口中解释的任何其他索引器的签名。
下面的例子显示了如何实现接口索引器。
// Indexer on an interface:
public interface ISomeInterface
{
// Indexer declaration:
int this[int index]
{
get;
set;
}
}
// Implementing the interface.
class IndexerClass : ISomeInterface
{
private int[] arr = new int[100];
public int this[int index] // indexer declaration
{
get
{
// The arr object will throw IndexOutOfRange exception.
return arr[index];
}
set
{
arr[index] = value;
}
}
}
class MainClass
{
static void Main()
{
IndexerClass test = new IndexerClass();
System.Random rand = new System.Random();
// Call the indexer to initialize its elements.
for (int i = 0; i < 10; i )
{
test[i] = rand.Next();
}
for (int i = 0; i < 10; i )
{
System.Console.WriteLine('Element #{0} = {1}', i, test[i]);
}
// Keep the console window open in debug mode.
System.Console.WriteLine('Press any key to exit.');
System.Console.ReadKey();
}
}
/* Sample output:
Element #0 = 360877544
Element #1 = 327058047
Element #2 = 1913480832
Element #3 = 1519039937
Element #4 = 601472233
Element #5 = 323352310
Element #6 = 1422639981
Element #7 = 1797892494
Element #8 = 875761049
*/
从上例中,可以通过使用插口成员彻底限制名来应用显式插口组员完成。 比如:
public string ISomeInterface.this { }然而,只有当类别使用相同的索引器签名以实现一个以上的接口时,才需要使用完全限制名称,以防止多义性。 Employee class is implementing two interfaces, ICitizen and IEmployee, and both interfaces have the same indexer signature, the explicit interface member implementation is necessary." data-guid=例如,e374dc177442840037ade58d9182f1,假如 Employee 两个插口完成了类别 ICitizen 和 IEmployee,而且这两个插座有相同的索引器签名,必须由显式插座组成员完成。 也就是说,以下索引器说明:
public string IEmployee.this { }在 IEmployee 索引器在插口上,以下说明:
public string ICitizen.this { }