DataGridView的,例如,您可以这样做:
DataGridView dgv = ...;
DataGridViewCell cell = dgv[1,5];
但对我的生活,我不能找到索引/方括号运算符的文件。 他们是怎么说的? 它在哪里实现? 它可以抛出? 我该怎么做我自己的类是一回事吗?
ETA:感谢所有的快速解答。 简述:相关文件是在“项目”属性; 超负荷的方式是通过声明一个属性等public object this[int x, int y]{ get{...}; set{...} }
public object this[int x, int y]{ get{...}; set{...} }
; 为DataGridView的索引不会抛出,至少根据文档。 它没有提到如果提供无效的坐标发生了什么。
ETA还是那句话:OK,即使文件使得它没有提到(顽皮微软!),事实证明,对于DataGridView的索引实际上将抛出一个ArgumentOutOfRangeException,如果你有无效的坐标为它供给。 公平警告。
你可以找到如何做到这一点在这里 。 总之,它是:
public object this[int i]
{
get { return InnerList[i]; }
set { InnerList[i] = value; }
}
这将是该项目属性: 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;
}
Operators Overloadability
+, -, *, /, %, &, |, <<, >> All C# binary operators can be overloaded.
+, -, !, ~, ++, --, true, false All C# unary operators can be overloaded.
==, !=, <, >, <= , >= All relational operators can be overloaded,
but only as pairs.
&&, || They can't be overloaded
() (Conversion operator) They can't be overloaded
+=, -=, *=, /=, %= These compound assignment operators can be
overloaded. But in C#, these operators are
automatically overloaded when the respective
binary operator is overloaded.
=, . , ?:, ->, new, is, as, sizeof These operators can't be overloaded
[ ] Can be overloaded but not always!
信息来源
对于支架:
public Object this[int index]
{
}
但
数组索引操作符不能超载 ; 然而,类型可以定义索引,即采取一个或多个参数的属性。 索引器参数被包含在方括号,就像阵列索引,但索引参数可以声明为是任何类型的(不像数组下标,它必须是整数)的。
从MSDN
public class CustomCollection : List<Object>
{
public Object this[int index]
{
// ...
}
}
对于CLI C ++(使用/ clr编译)看到此MSDN链接 。
总之,一个属性可以命名为“默认”:
ref class Class
{
public:
property System::String^ default[int i]
{
System::String^ get(int i) { return "hello world"; }
}
};
如果您使用C#6或更高版本,您可以使用GET-仅索引表达式健全语法:
public object this[int i] => this.InnerList[i];
下面是一个例子返回从内部列表对象的值。 应该给你的想法。
public object this[int index]
{
get { return ( List[index] ); }
set { List[index] = value; }
}
如果你指的是阵列索引,,你超载,仅仅通过编写索引属性..而且你可以重载,(请填写你想要的)索引的属性,只要每个人都有不同的参数签名
public class EmployeeCollection: List<Employee>
{
public Employee this[int employeeId]
{
get
{
foreach(var emp in this)
{
if (emp.EmployeeId == employeeId)
return emp;
}
return null;
}
}
public Employee this[string employeeName]
{
get
{
foreach(var emp in this)
{
if (emp.Name == employeeName)
return emp;
}
return null;
}
}
}