【问题标题】:How to access the indexer with Interface Explicitly implemended如何使用显式实现的接口访问索引器
【发布时间】:2016-05-20 10:11:13
【问题描述】:

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

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

【问题讨论】:

  • “显式接口实现”的第一个 Google 结果是Explicit Interface Implementation Tutorial,它回答了您的问题。
  • 将此转换为接口 Console.WriteLine("Property Indexer: {0}, StringBuilder: {1}", ((IndexerInterface)this)[i], sbName[i]);跨度>

标签: c#


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    与访问 any 显式实现的接口相同,通过转换为接口类型:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-08
      • 2023-01-31
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2017-05-11
      相关资源
      最近更新 更多