-
[C#] 인덱서Development/C# 2023. 7. 27. 15:33728x90
인덱서
- 인덱서를 사용하면 배열과 유사한 방식으로 개체를 인덱싱할 수 있습니다.
- get 접근자는 값을 반환합니다. set 접근자는 값을 할당합니다.
- this 키워드는 인덱서를 정의하는 데 사용됩니다.
- value 키워드는 set 접근자가 할당하는 값을 정의하는 데 사용됩니다.
using System; class SampleCollection<T> { // Declare an array to store the data elements. private T[] arr = new T[100]; // Define the indexer to allow client code to use [] notation. public T this[int i] { get { return arr[i]; } set { arr[i] = value; } } } class Program { static void Main() { var stringCollection = new SampleCollection<string>(); stringCollection[0] = "Hello, World"; Console.WriteLine(stringCollection[0]); } } // The example displays the following output: // Hello, World.
C# 6 이후 부터는 읽기 전용 인덱서는 아래 처럼 작성 가능
// =>에서 식 본문을 도입하며 get 키워드는 사용되지 않습니다. public T this[int i] => arr[i];
C# 7.0부터 get 및 set 접근자 모두 아래 처럼 작성 가능
public T this[int i] { get => arr[i]; set => arr[i] = value; }
예제
public class TempRecord { // Array of temperature values float[] temps = new float[10] { 56.2F, 56.7F, 56.5F, 56.9F, 58.8F, 61.3F, 65.9F, 62.1F, 59.2F, 57.5F }; // To enable client code to validate input // when accessing your indexer. public int Length => temps.Length; // Indexer declaration. // If index is out of range, the temps array will throw the exception. public float this[int index] { get => temps[index]; set => temps[index] = value; } }
class Program { static void Main() { var tempRecord = new TempRecord(); // Use the indexer's set accessor tempRecord[3] = 58.3F; tempRecord[5] = 60.1F; // Use the indexer's get accessor for (int i = 0; i < 10; i++) { Console.WriteLine($"Element #{i} = {tempRecord[i]}"); } // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } /* Output: Element #0 = 56.2 Element #1 = 56.7 Element #2 = 56.5 Element #3 = 58.3 Element #4 = 58.8 Element #5 = 60.1 Element #6 = 65.9 Element #7 = 62.1 Element #8 = 59.2 Element #9 = 57.5 */ }
MDCS에 설명 너무 잘 되어 있다!!
추가적으로 공부하고 싶으면 사이트 접속 해서 정독하는 거 추천!
728x90'Development > C#' 카테고리의 다른 글
[C#] 순환참조 (0) 2023.08.16 [프렉티컬 C#] 날짜와 시간 처리 (0) 2023.07.28 [프렉티컬 C#] Dictionary (0) 2023.07.27 [프렉티컬 C#] 배열과 List<T> (0) 2023.07.26 [프렉티컬 C#] 문자열 처리 (0) 2023.07.26