C#

C#문법-13 : 전처리기와 Indexer 인덱서

알통몬_ 2019. 4. 24. 16:57
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 

지난 포스팅에서 C# 이벤트에 대해 간단히 알아보았습니다.

2019/04/24 - [C#] - C#문법-12 : 이벤트 event

이번 포스팅에서는 전처리기와 Indexer에 대해 공부합니다.


전처리기 지시어 (Preprocesser Directive) :

실제 컴파일 시작 전 컴파일러에게 특정 명령을 먼저 처리하도록

지시하는 것. 

모든 전처리기 지시어는 #으로 시작합니다. 우리가 C를 공부할 때

처음 배우는 #define 처럼요. 그리고 문장 끝에 붙는 세미콜론은

붙이지 않습니다.


* 전처리기 지시어는 해당 파일에서만 기능을 발휘합니다.


조건별로 컴파일하기 및 기타 전처리기 지시어들.

#define TEST_ENV2

using System;
using System.Text;
using System.Windows;


namespace workspace_csharp {

public class Program {

#region public methods
public void getUserName(){}
private void getUserAge(){}
#endregion


#region public properties

#endregion


#region privates

#endregion

int getAvg(params int[] point) {
int avg = 0;
for(int i = 0; i < point.Length; i++) {
avg += point[i];
}
avg /= point.Length;
return avg;
}

public static void Main(String[] args) {

Program program = new Program();
bool isTestEnv = false;
#if (TEST_ENV)
//Optional Paramter
Console.WriteLine(program.getAvg(10, 20, 30, 40 ,50));
isTestEnv = true;

#else
Console.WriteLine(program.getAvg(100, 85, 77, 93, 66, 58, 99));
isTestEnv = false;
#endif

if(isTestEnv) System.Console.WriteLine("true");
else System.Console.WriteLine("false");
}


// #undef : #define과 한 세트로 사용됨, define 해제하는 역할
// #elif : #if 와 함께 사용됨 == else if
// #line : 라인 번호를 임의로 변경하거나 파일 이름을 임의로 변경할 때 사용.
// #error : 전처리 시에 Preprocessing을 멈추고 에러 메시지 출력
// #warning : #error 처럼 에러 메시지를 출력하지만, Preprocessing은 멈추지 않음.
}
}

저는 유니티를 위해 C#을 공부 중인데 크게 많이 사용될 것 같지

않아서 여기까지 그냥 전처리기 지시어라는 게 있다.

정도만 알고 넘어가겠습니다.


Indexer (인덱서) : 아래 예제 코드와 주석을 보시면 이해가

되실 겁니다.

using System;

namespace workspace_csharp {

// C# 인덱서 Indexer
// this[] 라는 특별한 문법을 써서 Property 처럼
// get 과 set을 정의합니다.
// 클래스 내부의 어떤 값을 반환하는지는 클래스 작성 시 필요에 따라 정하고
// 반환 데이터 타입도 여러가지로 지정할 수 있습니다.
// * 한 번에 여러 개의 Indexer를 지정할 수 는 없습니다.

class MyIndexer {

private const int LIMIT = 100;
private string name;

private long[] userIds = new long[LIMIT];

public long this[int index] {
get {
if(index < 0 || index >= LIMIT) {
throw new IndexOutOfRangeException();
} else {
return userIds[index];
}
}
set {
if(!(index < 0 || index >= LIMIT)) {
userIds[index] = value;
}
}
}

// public string this[int idx] {
// get {
// return "";
// }
// set {

// }
// }
}

public class Indexer {

public static void Main(string[] args)
{
MyIndexer myIndexer = new MyIndexer();
myIndexer[0] = 20190424001;
long a = myIndexer[0];
}
}
}


이상으로 전처리기와 인덱서에 대해 알아보았습니다.

다음 포스팅에서는 접근 제한자에 대해 공부합니다.

반응형