当我们为索引器显式实现接口时,我们如何在创建对象后能够在索引器中设置和获取值。或在同一个类构造函数
中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
}
}
}
答案 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';