'this'关键字作为属性

时间:2010-03-25 16:29:53

标签: c# properties this keyword

我很了解C#,但这对我来说很奇怪。在一些旧程序中,我看到了这段代码:

public MyType this[string name]
{
    ......some code that finally return instance of MyType
}

怎么称呼?有什么用呢?

4 个答案:

答案 0 :(得分:29)

indexer。声明之后你可以这样做:

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;

答案 1 :(得分:7)

这是Indexer Property。它允许您通过索引直接“访问”您的类,就像您访问数组,列表或字典一样。

在你的情况下,你可以有类似的东西:

public class MyTypes
{
    public MyType this[string name]
    {
        get {
            switch(name) {
                 case "Type1":
                      return new MyType("Type1");
                 case "Type2":
                      return new MySubType();
            // ...
            }
        }
    }
}

然后你可以使用它:

MyTypes myTypes = new MyTypes();
MyType type = myTypes["Type1"];

答案 2 :(得分:2)

这是一个名为 Indexer 的特殊属性。这允许您的类像数组一样被访问。

myInstance[0] = val;

你会在自定义集合中经常看到这种行为,因为数组语法是一个众所周知的接口,用于访问集合中的元素,这些元素可以通过键值识别,通常是它们的位置(如数组和列表中)或者通过逻辑键(如字典和哈希表)。

您可以在MSDN文章Indexers (C# Programming Guide)中找到有关索引器的更多信息。

答案 3 :(得分:0)

它是一个索引器,通常用作集合类型类。

查看 Using Indexers (C# Programming Guide)