무명 형식 (Anonymous Type)
변수 형식(타입)에는 잘 알다시피 int, float, double, string, class … 등등이 있으며, 우리는 이 형식 이름으로 변수를 선언해서 사용한다.
int A; float B; string C; class D;
그런데 C#에는 독특하게 이름이 없는 형식(타입)이 존재합니다.
이를 무명형식 (Anonymous Type)이라고 합니다.
무명형식은 임시 변수가 필요할때 아주 유용합니다.
(임시 변수 : 임시로 생성해서 사용후, 재사용되지 않는 변수)
선언하는 방법은 다음과 같다.
var temp = new { Age = 40, Name = "TAEK" }; Console.WriteLine("{0},{1}", temp.Age, temp.Name);
무명형식은 반드시 선언과 함께 new 키워드로 인스턴스를 생성해주어야 하며, 생성된 인스턴스는 읽기 전용이기 때문에 값 변경이 불가능합니다.
그럼 간단한 예제를 작성해 봅시다.
class MainApp { static void Main(string[] args) { var temp = new { Age = 40, Name = "TAEK" }; Console.WriteLine("{0},{1}", temp.Age, temp.Name); var tempArr = new { Int = new int[]{ 1, 2, 3, 4, 5 }, Float = new float[]{ 0.1 f, 0.2 f, 0.3 f, 0.4 f, 0.5 f } }; foreach(var element in tempArr.Int) { console.Write("{0} ", element); // 1,2,3,4,5 } console.WriteLine(); foreach(var element in tempArr.Float) { console.Write("{0} ", element); // 0.1,0.2,0.3,0.4,0.5 } console.WriteLine(); } }
무명 메소드 (Anonymous Method)
모든 메소드는 이름을 가진다.
메소드가 매개변수나 반환값은 없을수 잇지만 이름이 없을 수는 없다.
당연한 말이지만 이름이 잇어야 그 메소드를 호출할 수 있기 때문이다.
하지만 C#은 이름이 없는 무명 메소드를 제공한다.
(무명 메소드는 델리게이트와 함께 사용되기 때문에, 델리게이트를 공부하길 바랍니다.)
무명 메소드는 이름이 없기 때문에 메소드를 호출하기 위해서 델리게이트 변수가 필요합니다.
즉 델리게이트 변수를 선언하고, 그 변수로 무명 메소드를 참조하게 하는 것이다.
(델리게이트와 무명 메소드는 당연히 같은 형식이어야 한다.)
// 델리게이트 타입 선언 delegate int MyDelegate(int a, int b); public static void main() { // 델리게이트 변수 선언 MyDelegate add; // 무명 메소드 참조 add = delegate(int a, int b) { return a + b; }; Console.WriteLine(add(11, 22)); }
델리게이트로 무명메소드를 참조하면 이제 함수내에서 얼마든지 호출해서 쓸수 있다.
무명 메소드는 위와 같이 간단한 연산의 메소드를 임시적으로 써야 할때나 델리게이트를 다른 함수에 넘겨주어 콜백으로 사용할 때에도 유용합니다.