일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 인터페이스의 프로퍼티
- 형식변환
- 클래스 연습문제
- 중첩클래스
- 튜플
- System.Array
- as
- 접근 한정자
- 오버라이딩
- 인터페이스 예제
- 자동구현프로퍼티
- 클래스
- 무명형식
- 인덱서
- 일반화 클래스
- c#
- 프로퍼티
- 인터페이스 상속
- 배열
- 프로퍼티와 생성자
- 분할 클래스
- 메소드숨기기
- 추상 프로퍼티
- 이것이C#이다
- base()
- this 키워드
- 가변배열
- 컬렉션 초기화
- 배열초기화
- is
- Today
- Total
제로의영역
10.9 인덱서 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
1. 정의: 인덱스를 이용해서 객체 내의 데이터에 접근하게 해주는 프로퍼티
* 인덱스: 데이터를 관리하기 쉽게 배열하여 놓은 목록
* 프로퍼티: 객체나 클래스의 필드에 접근하는 수단을 제공하는 클래스의 멤버
2. 형식
(1) this[ ]를 써서 프로퍼티처럼 get과 set을 정의
(2) 클래스 내부의 리턴 데이터의 종류는 클래스 디자인 시 필요에 따라 정하게 됨. 리턴 데이타 타입도 여러가지로 지정가능.
(3) 파라미터인 인덱스도 여러 데이터 타입을 쓸 수 있는데, 주로 int나 string 타입을 사용하여 인덱스 값을 주는 것이 일반적.
class 클래스이름
{
한정자 인덱서형식 this[형식 index] ---------// 인덱스의 식별자가 꼭 index일 필요는 없음.
{
get
{
// index를 이용하여 내부 데이터 변환
}
set
{
// index를 이용하여 내부 데이터 저장
}
}
}
* 인덱서는 프로퍼티처럼 식별자를 따로 가지지 않음
* 인덱스를 통해 객체 내의 데이터에 접근하게 해줌.
예제1 )
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _10._9
{
class MyList
{
private int[] array;
public MyList()
{
array = new int[3];
}
public int this[int index]
{
get
{
return array[index];
}
set
{
if(index >= array.Length)
{
Array.Resize<int>(ref array, index + 1); // Array.Resize: 배열의 크기 변경, ref:참조에 의한 매개 변수 전달
Console.WriteLine($"Array Resized:{array.Length}");
}
array[index] = value;
}
}
public int Length
{
get { return array.Length; }
}
}
class Program
{
static void Main(string[] args)
{
MyList list = new MyList();
for (int i = 0; i < 5; i++)
list[i] = i; // 배열을 다루듯 인덱스를 통해 데이터를 입력
for (int i = 0; i < list.Length; i++)
Console.WriteLine(list[i]); //데이터를 얻어올 때도 인덱스를 이용
}
}
}
실행결과
Array Resized:4
Array Resized:5
0
1
2
3
4
예제2)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _10._9._1
{
class TempRecord
{
// Array of temperature values
private 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
{
get { return temps.Length; }
}
// indexer declaration
// If index is out of range, the temps array will throw the exception.
public float this[int index]
{
get
{
return temps[index];
}
set
{
temps[index] = value;
}
}
}
class Program
{
static void Main(string[] args)
{
TempRecord 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++)
{
System.Console.WriteLine("Element#{0}={1}", i, tempRecord[i]);
}
//Keep yhr vondolr einfoe oprn in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
}
실행결과
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
Press any key to exit.
'C#' 카테고리의 다른 글
11.1 일반화 프로그래밍 & 11.2 일반화 메소드 (0) | 2019.12.27 |
---|---|
10.10 foreach가 가능한 객체 만들기 (0) | 2019.12.26 |
10.8 컬렉션을 초기화하는 방법 (0) | 2019.09.19 |
10.6 가변 배열 (0) | 2019.08.09 |
10.5 다차원배열 (0) | 2019.08.09 |