问题
Is it possible to create a class in .NET 4 with:
- an indexer,
- a property named \"Item\"?
For example, this C# class will not compile for me:
public class MyClass
{
public object Item { get; set; }
public object this[string index] { get { return null; } set { } }
}
The compiler gives an error CS0102:
The type \'MyClass\' already contains a definition for \'Item\'
although I am only explicitly defining Item
once.
回答1:
Based on this site, it is possible to use an attribute to rename the Indexer
public class MyClass
{
public object Item { get; set; }
[System.Runtime.CompilerServices.IndexerName("MyItem")]
public object this[string index] { get { return null; } set { } }
}
回答2:
C# internally creates a property called Item
for languages that don't support the indexer. You can control this name using the IndexerNameAttribute, like this:
[IndexerName("MyIndexer")]
public object this[string index]
{
get { return blah; }
}
回答3:
If I remember correctly, such an indexer can be accessed from VB.Net through an "Item()" method. That would be where that "defined twice" comes from.
来源:https://stackoverflow.com/questions/5110403/class-with-indexer-and-property-named-item