如何使用Interface明确地实现访问索引器

时间:2016-05-20 10:11:14

标签: c#

当我们为索引器显式实现接口时,我们如何在创建对象后能够在索引器中设置和获取值。或在同一个类构造函数

namespace oopsTesting.Indexer
{
    public interface IndexerInterface
    {
        char this[int index] { get; set;}
    }

    class Indexer : IndexerInterface
    {
        string name = "Babu Kumarasamy";
        StringBuilder sbName = new StringBuilder("Babu Kumarasamy");

        public Indexer()
        {
            for (int i = 0; i < sbName.Length; i++)
            {
                //How to access the indexer here
                Console.WriteLine("Property Indexer: {0}, StringBuilder: {1}", this[i], sbName[i]);
            }
        }
        char IndexerInterface.this[int index]
        {
            get { return name[index]; }

            set
            {
                //Property or indexer 'string.this[int]' cannot be assigned to -- it is read only
                //Strings are immutable which is why there's no setter, you can however use a string builder:
                //name[index] = value; 

                sbName[index] = value;
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            GenericIndexerTest objGenIndexer = new GenericIndexerTest();
            //How to access the indexer here
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以创建Indexer的新实例,将其分配给IndexerInterface类型的变量:

IndexerInterface ii = new Indexer();
char c = ii[0];

答案 1 :(得分:1)

(注意:此答案假设GenericIndexerTest在您的代码中继承了Indexer

与访问任何显式实现的接口相同,方法是转换为接口类型:

GenericIndexerTest objGenIndexer = new GenericIndexerTest();
((IndexerInterface)objGenIndexer)[0] = 'A';

或接口的代码,而不是实现:

IndexerInterface objGenIndexer = new GenericIndexerTest();
objGenIndexer[0] ='A';