수색…
통사론
- public 반환 유형 this [IndexType index] {get {...} set {...}}
비고
인덱서를 사용하면 배열과 같은 구문을 사용하여 인덱스가있는 객체의 속성에 액세스 할 수 있습니다.
- 클래스, 구조체 또는 인터페이스에서 사용할 수 있습니다.
- 과부하가 걸릴 수 있습니다.
- 여러 매개 변수를 사용할 수 있습니다.
- 값을 액세스하고 설정하는 데 사용할 수 있습니다.
- 인덱스에 대해 모든 유형을 사용할 수 있습니다.
간단한 인덱서
class Foo
{
private string[] cities = new[] { "Paris", "London", "Berlin" };
public string this[int index]
{
get {
return cities[index];
}
set {
cities[index] = value;
}
}
}
용법:
var foo = new Foo();
// access a value
string berlin = foo[2];
// assign a value
foo[0] = "Rome";
인수 2 개와 인터페이스가있는 인덱서
interface ITable {
// an indexer can be declared in an interface
object this[int x, int y] { get; set; }
}
class DataTable : ITable
{
private object[,] cells = new object[10, 10];
/// <summary>
/// implementation of the indexer declared in the interface
/// </summary>
/// <param name="x">X-Index</param>
/// <param name="y">Y-Index</param>
/// <returns>Content of this cell</returns>
public object this[int x, int y]
{
get
{
return cells[x, y];
}
set
{
cells[x, y] = value;
}
}
}
인덱서를 오버로드하여 SparseArray를 만듭니다.
인덱서를 오버로드하면 배열처럼 보이지만 느끼지만 그렇지 않은 클래스를 만들 수 있습니다. 그것은 O (1) 메소드를 가져오고 설정하며, 인덱스 100에있는 요소에 액세스 할 수 있지만 그 안에있는 요소의 크기를 유지합니다. SparseArray 클래스
class SparseArray
{
Dictionary<int, string> array = new Dictionary<int, string>();
public string this[int i]
{
get
{
if(!array.ContainsKey(i))
{
return null;
}
return array[i];
}
set
{
if(!array.ContainsKey(i))
array.Add(i, value);
}
}
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow