C# 언어의 배열은 참조 형식의 데이터 타입에 속한다. 따라서 가비지 컬렉션에 의해 메모리가 관리된다.
또한, 가변 길이 배열을 지원하기 때문에 배열의 각 행의 길이를 서로 다르게 명시하는 것이 가능하다.
단, 가변 길이 배열은 2차원 배열만 지원한다.
//1. 평균적으로 배열을 사용하는 방법
int[] oValue = new int[5];
//2. 더 많이 사용하는 방법
int[] oOtherValues = new int[]
{
1, 2, 3, 4, 5
};
var oStringBuilder = new System.Text.StringBuilder();
// Length = end + 1
for(int i = 0; i < oOtherValues.Length; ++i)
{
// Append(): n1 문자열 뒤에 n2 문자열을 추가한다.
// AppendFormat(): 형식에 맞춘 문자열 추가 (메모리 정렬)
oStringBuilder.AppendFormat("{0}", oOtherValues[i]);
}
// ToSting(): 해당 문자열에 대한 Stiring 객체를 생성 이후 반환
// 1, 2, 3, 4, 5
Debug.Log(oStringBuilder.ToString());
// C# 언어의 2차원 이상 배열은 , 를 통해서 명시하는 것이 가능하다.
// C / C++ 2차원 -> [][]
int[,] oMatrix = new int[,]
{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
};
// arr.Length
// arr.GetLength(0) : 행의 개수
// arr.GetLength(1) : 열의 개수
for (int i = 0; i < oMatrix.GetLength(0); ++i)
{
int nSumValue = 0;
for (int j = 0; j < oMatrix.GetLength(1); ++j)
{
nSumValue += oMatrix[i, j];
}
Debug.LogFormat("SumValue : {0}", nSumValue);
}
int[][] oVarArray = new int[][]
{
new int[5],
new int[3],
new int[7],
};
for(int i = 0; i <oVarArray.GetLength(0); ++i)
{
Debug.LogFormat("Length : {0}", oVarArray[i].Length);
}
클래스의 멤버 변수, 함수가 모두 정적으로 이루어진 클래스를 의미한다.
정적 클래스는 정적 변수, 함수 이외에 멤버 변수, 함수 등을 선언하는 것이 불가능하며, 상속과 객체화가 불가능하다.
C# 정적 클래스는 static 키워드를 명시해 정의한다.
따라서 static 키워드가 명시된 클래스는 클래스 변수와 함수 이외에는 다른 멤버의 정의가 불가능하다.

이런 식으로 사용하게 되면 다른 스크립트에서도 참조 해당 함수로 접근이 가능하다.

기존에 제공되는 클래스 또는 외부 라이브러리에 속해 있는 클래스에 새로운 기능을 상속이 아닌 메서드를 이용해 기능을 확장하는 것을 말한다.
이 확장 메서드는 정적 클래스만을 통해 정의할 수 있다. static 키워드를 사용해 모든 곳에서 접근할 수 있어야 하며, 확장 메서드는 정적클래스가 아니라면 구현 자체를 할 수 없다.
또한, 확장 메서드를 정의하는 정적 클래스는 반드시 최상단 영역에 위치시켜야 하며, 특정한 클래스의 중첩 클래스로는 확장 메서드를 정의하는 것이 불가능하다.

static 키워드를 사용해 확장 메서드를 만들었다. int에는 IsBetween이라는 것이 없기 때문에 원래는 사용할 수 없지만, 확장메서드로 기능을 추가해 int에 해당 기능을 사용할 수 있도록 하였다.
a 는 int 타입이기 때문에 .을 찍어도 IsBetween이 나오지 않지만, 확장 메서드를 통해 기능을 추가했기 때문에 사용할 수 있다.

이렇게 value에 들어온 a의 값과, 20, 30의 값이 모두 더해져 60이 출력된 것을 확인할 수 있다.