例如,DataGridView让你这样做:

DataGridView dgv = ...;
DataGridViewCell cell = dgv[1,5];

但是无论如何我都找不到关于索引/方括号操作符的文档。他们叫它什么?它在哪里实现?它能扔吗?我怎么能在自己的课堂上做同样的事情呢?

埃塔:谢谢你的快速回答。简单地说:相关文件在“Item”属性下;重载的方法是通过声明一个属性,如公共对象this[int x, int y]{get{…};集{…}};DataGridView的索引器不会抛出,至少根据文档是这样的。它没有提到如果您提供无效的坐标会发生什么。

ETA:好的,即使文档没有提到它(淘气的微软!),事实证明,DataGridView的索引器实际上会抛出一个argumentoutofranceexception,如果你提供了无效的坐标。合理的警告。


当前回答

这就是item属性:http://msdn.microsoft.com/en-us/library/0ebtbkkc.aspx

也许像这样的东西会起作用:

public T Item[int index, int y]
{ 
    //Then do whatever you need to return/set here.
    get; set; 
}

其他回答

这就是item属性:http://msdn.microsoft.com/en-us/library/0ebtbkkc.aspx

也许像这样的东西会起作用:

public T Item[int index, int y]
{ 
    //Then do whatever you need to return/set here.
    get; set; 
}

下面是一个从内部List对象返回值的示例。应该能让你明白。

  public object this[int index]
  {
     get { return ( List[index] ); }
     set { List[index] = value; }
  }

你可以在这里找到怎么做。 简而言之就是:

public object this[int i]
{
    get { return InnerList[i]; }
    set { InnerList[i] = value; }
}

如果你只需要一个getter,下面的答案语法也可以使用(从c# 6开始)。

public class CustomCollection : List<Object>
{
    public Object this[int index]
    {
        // ...
    }
}

对于CLI c++(使用/clr编译),请参阅此MSDN链接。

简而言之,属性可以被命名为“default”:

ref class Class
{
 public:
  property System::String^ default[int i]
  {
    System::String^ get(int i) { return "hello world"; }
  }
};