新物网

当前位置:首页 > 百科

百科

C#详细解释索引器中的索引器

时间:2023-10-16 18:59:35 闻子
索引:是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 accessor of a property has no parameters." data-guid=“A6cc8a328d6f37fe626bef0a1e49b” get 浏览器没有主要参数get accessor of an indexer has the same formal parameter list as the indexer." data-guid=“d83df23e86b78db447d31d82a237”>索引器 get 浏览设备具有与索引器相同的形状参表set accessor of a property contains the implicit value parameter." data-guid=7b8d943b10ea3a65d99f8a3c0b284e05 set 包括隐式的浏览器 value 主要参数set accessor of an indexer has the same formal parameter list as the indexer, and also to the value parameter." data-guid=“61fa719a7490fc5fb284c6b5ef3c36”>除主要参数外,索引器 set 浏览器还应具有与索引器相同的形状参表Auto-Implemented Properties (C# Programming Guide)." data-guid=“0980783e25d81c64f0194104a5b78f1”>支持自动完成的特性(C# 程序编写手册,应用短词法短词法不兼容

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

        Element #9 = 393083859

     */

从上例中,可以通过使用插口成员彻底限制名来应用显式插口组员完成。 比如:

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 { }