Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- Sliverlight
- 실버라이트
- 전기차
- 성공
- 구글
- silverlight
- jQuery
- C#
- 게으름
- COM+
- XML
- GTD
- 형태소분석기
- 검색
- 암호화
- Web 2.0
- 개발자
- .net
- 자바스크립트
- JavaScript
- GDI+
- Ajax
- 백신
- 실버라이트2
- WEb 2.0 Expo
- 리팩토링
- hnd-7070
- MS
- ASP.NET
- 해킹
Archives
- Today
- Total
꿈으로 가는 작은 계단
연산자 오버로딩 - 인덱스 본문
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 |