예를 들어 DataGridView를 사용하면 다음을 수행 할 수 있습니다.
DataGridView dgv = ...;
DataGridViewCell cell = dgv[1,5];
그러나 내 인생에서 색인 / 대괄호 연산자에 대한 문서를 찾을 수 없습니다. 그들은 그것을 무엇이라고 부릅니까? 어디에서 구현됩니까? 던질 수 있습니까? 내 수업에서 어떻게 똑같은 일을 할 수 있습니까?
ETA : 모든 빠른 답변에 감사드립니다. 간단히 : 관련 문서는 “항목”속성에 있습니다. 오버로드하는 방법은 다음과 같은 속성을 선언하는 것입니다 public object this[int x, int y]{ get{...}; set{...} }
. 적어도 문서에 따르면 DataGridView의 인덱서는 throw되지 않습니다. 유효하지 않은 좌표를 제공하면 어떻게되는지 언급하지 않습니다.
ETA 다시 : OK, 문서에서 언급하지 않았지만 (Microsoft가 아닙니다!) 잘못된 좌표를 제공하면 DataGridView의 인덱서에서 ArgumentOutOfRangeException이 발생합니다. 공정한 경고.
답변
public object this[int i]
{
get { return InnerList[i]; }
set { InnerList[i] = value; }
}
게터 만 필요한 경우 아래 답변 의 구문을 사용할 수도 있습니다 (C # 6부터).
답변
이것이 항목 속성이 될 것입니다 : 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
답변
C # 6 이상을 사용하는 경우 get-only indexer에 표현식 본문 구문을 사용할 수 있습니다.
public object this[int i] => this.InnerList[i];
답변
public class CustomCollection : List<Object>
{
public Object this[int index]
{
// ...
}
}
답변
/ clr로 컴파일 된 CLI C ++에 대해서는 이 MSDN 링크를 참조하십시오 .
간단히 말해, 속성에 “default”라는 이름을 지정할 수 있습니다.
ref class Class
{
public:
property System::String^ default[int i]
{
System::String^ get(int i) { return "hello world"; }
}
};
답변
다음은 내부 List 객체에서 값을 반환하는 예입니다. 당신에게 아이디어를 제공해야합니다.
public object this[int index]
{
get { return ( List[index] ); }
set { List[index] = value; }
}