class Point
{
public int x;
public int y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
public override string ToString()
{
//(x,y)값
return String.Format("({0},{1})",x,y);
}
// + 연산자 메서드
public static Point operator +(Point pt1, Point pt2)
{
return (new Point(pt1.x + pt2.x, pt1.y + pt2.y));
}
// - 연산자 메서드
public static Point operator -(Point pt1, Point pt2)
{
return (new Point(pt1.x - pt2.x, pt1.y - pt2.y));
}
}
class Class1
{
static void Main(string[] args)
{
Point pt1 = new Point(100, 100);
Point pt2 = new Point(100, 200);
Point pt3;
// Point 객체 + 연산
pt3 = pt1 + pt2;
Console.WriteLine("{0} + {1} = {2}", pt1, pt2, pt3);
}
}
인덱서란
프로퍼티(Property)의 기본 아이디어는 클래스를 사용하는 입장에서 보았을 때 마치 필드를 직접 사용하는 것처럼 보이도록 하는 것
실제로는 get/set 메서드가 불려져서 필드 값을 넣거나 가져온다
// 프로퍼티를 사용한 예
pt.X = 100;
int x = pt.X;
인덱서(Indexer)는 프로퍼티를 모아 놓은 배열을 사용하는 개념
get/set 메서드를 이용하며, 여러 개의 값을 다루기 때문에 인덱스 값이 필요
// 비트 배열을 인덱서로 사용한 예
Bits[0] = true;
Bits[1] = false;
인덱서(indexer)
일련의 데이터 값을 가질 수 있는 데이터 구조가 필요
사용할 데이터형을 지정하고, 클래스 자체를 배열처럼 사용하기 때문에 this를 사용하고 [ ] 사이에 인덱스로 사용할 데이터형을 지정
인덱서(indexer)
프로퍼티와 마찬가지로 get/set 메서드가 불려지며, 특정 값을 가리키는 인덱스를 지정
ObjList 인덱서 만들기 예제
ArrayList 클래스를 사용해서 object 형 데이터 리스트를 다루는 인덱서를 정의해보는 예제
ArrayList 콜렉션 클래스를 다루기 위해 Collections 네임스페이스를 추가
using System;
using System.Collections;
ObjList 클래스를 정의하고, 멤버로 ArrayList 클래스를 추가
public class ObjList
{
protected ArrayList data; // ArrayList 객체
public ObjList()
{
data = new ArrayList();
// ArrayList 클래스는 동적으로 배열 크기를 관리하며,
// 내부적으로 관리하는 데이터는 object 형
}
}
ObjList 클래스에 다음과 같이 인덱서를 추가하고, get 메서드에서 값을 리턴하며, 인덱스가 범위를 벗어나는지 검사해서 예외 처리
public object this[ int i ]
{
get
{
if ( i >= 0 && i < data.Count ) // 인덱스 범위 검사
{
return data[i];
}
else
throw new IndexOutOfRangeException( "범위 벗어남" + i );
}
set
{}
}
set 메서드에서 값을 넣을 때도 마찬가지로 범위를 검사해서 범위 내에 들어있는 경우에만 값을 넣어주며, 마찬가지로 범위를 벗어나는 경우는 예외 처리
set
{
if ( i >= 0 && i < data.Count ) // 인덱스 범위 검사
{
data[ i ] = value;
}
else
if ( i == data.Count ) // 마지막 데이터 요소인 경우
{
data.Add( value ); // 데이터를 추가합니다.
}
else
throw new IndexOutOfRangeException( "범위 벗어남" + i );
}
인덱서에 여러 데이터형을 가진 값을 넣고, 값을 출력
public class Class1
{
public static void Main()
{
ObjList list = new ObjList();
list[0] = 100;
list[1] = "apple";
list[2] = 123.456;
for( int i=0; i<3; i++ )
Console.WriteLine( "[{0}] = {1}", i, list[i] );
}
}
출처 : http://ssogarif.tistory.com/entry/%EC%97%B0%EC%82%B0%EC%9E%90-%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9-%EC%9D%B8%EB%8D%B1%EC%8A%A4
'소프트웨어 > C# & ASP.NET' 카테고리의 다른 글
ASP.NET 2.0 프로젝트의 특정 폴더의 설명 (0) | 2009.08.07 |
---|---|
.NET Assembly (0) | 2009.08.07 |
C# 디버깅 (0) | 2009.08.06 |
C#에서의 데이터형 (0) | 2009.08.06 |
닷넷 3.5를 이용한 디자인 패턴의 구현 (4) (0) | 2009.08.05 |