#363 – An Indexer Can Have Both get and set Accessors
July 8, 2011 Leave a comment
Similar to a property, an indexer in C# can have either a get accessor for reading an element, a set accessor for writing an element, or both.
- get accessor – read-only behavior
- set accessor – write-only behavior
- get and set accessors – read-write behavior
Here’s an example of a read-write accessor.
public class Logger
{
private List<LogMessage> messages = new List<LogMessage>();
// Read-write indexer
public LogMessage this[int i]
{
get { return messages[i]; }
set { messages[i] = value; }
}
public void LogAMessage(LogMessage msg)
{
messages.Add(msg);
}
}
We can then use the indexer to read and write elements in the internal list.
Logger log = new Logger();
log.LogAMessage(new LogMessage("This happened", 5));
log.LogAMessage(new LogMessage("Something else happened", -1));
LogMessage lm = log[1]; // Get 2nd element
log[0] = new LogMessage("New 1st guy", 1); // Replace 1st element