The 'this' keyword as a property
Solution 1:
It is indexer. After you declared it you can do like this:
class MyClass
{
Dictionary<string, MyType> collection;
public MyType this[string name]
{
get { return collection[name]; }
set { collection[name] = value; }
}
}
// Getting data from indexer.
MyClass myClass = ...
MyType myType = myClass["myKey"];
// Setting data with indexer.
MyType anotherMyType = ...
myClass["myAnotherKey"] = anotherMyType;
Solution 2:
This is an Indexer Property. It allows you to "access" your class directly by index, in the same way you'd access an array, a list, or a dictionary.
In your case, you could have something like:
public class MyTypes
{
public MyType this[string name]
{
get {
switch(name) {
case "Type1":
return new MyType("Type1");
case "Type2":
return new MySubType();
// ...
}
}
}
}
You'd then be able to use this like:
MyTypes myTypes = new MyTypes();
MyType type = myTypes["Type1"];
Solution 3:
This is a special property called an Indexer. This allows your class to be accessed like an array.
myInstance[0] = val;
You'll see this behaviour most often in custom collections, as the array-syntax is a well known interface for accessing elements in a collection which can be identified by a key value, usually their position (as in arrays and lists) or by a logical key (as in dictionaries and hashtables).
You can find out much more about indexers in the MSDN article Indexers (C# Programming Guide).