914 Appendix i
#9 , ,
C# . (anony-
mous) , 도구. LINQ .
았다, , , 쉽습
. 람다 어렵 .
작해 .
class Program {
delegate void MyIntAndString(int i, string s);
delegate int CombineTwoInts(int x, int y);
static void Main(string[] args) {
/*
* * 컴파일 시점에 객체의 유형을 IDE가 결정하도var 키워드가 어떻게 하는지 15장에 나왔었
*
* var new사용해서 묻지마 유형의 객체를 생성할 수 있습니다.
*
* 명 유형에 관해 더 알고 싶다
* http://msdn.microsoft.com/en-us/library/bb397696.aspx방문해 보세
*/
// Guy 매우 흡사한 익명 유형을 생성합니다.
var anonymousGuy = new { Name = "Bob", Age = 43, Cash = 137 };
// 부분을 입력하면, 인텔리센스가 자동으로 멤버들을 골라줍니다.
// Name, Age, Cash인텔리센스 창에 나타납니다
Console.WriteLine("{0} is {1} years old and has {2} bucks",
anonymousGuy.Name, anonymousGuy.Age, anonymousGuy.Cash);
// 력 결과: Bob is 43 years old and has 137 bucks
// 명 유형의 인스턴스ToString() 메서드를 갖고 있습니다.
Console.WriteLine(anonymousGuy.ToString());
// 력 결과: { Name = Bob, Age = 43, Cash = 137 }
/*
* 11장에서, 여러분은 메서드를 참조하기 위해 대리자를 어떻게 사용할 수 있는지 배웠습니다.
*
* 금까지 학습했던 모든 대리자 예제에서는 기존 메서드를 대리자에 할당했습니다.
*
* 명 메서드는 하나의 문장에서 선언하는 메서드로, 익명 유형처럼 { }를 사용해서 선언합니다.
* 명 함수에 대해 더 알고 싶다
* http://msdn.microsoft.com/en-
us/library/0yw3tz5k.aspx 방문해 보세요.
*/
/*
* var 키워드가 IDE가 컴파일 시점에 객체의 유형을 결정하는 것을 14장에서 봤습니다.
*
* 또한 varnew 사용해서 묻지마 유형의 객체를 생성할 수 있습니다.
*
* 익명 유형(형식)에 관해 더 알고 싶다
* http://msdn.microsoft.com/ko-kr/library/bb397696.aspx방문하세요.
*/
/*
* 15에서 여러분은 메서드를 참조하는 대리자의 사용법을 배웠습니다.
* 지금까지 학습했던 모든 대리자 예제에서는 기존 메서드를 대리자에 할당했습니다.
*
* 익명 메서드는 하나의 문장에서 선언하는 메서드로, 익명 유형처럼 { }를 사용해서 선언합니다.
*
* 익명 메서드(무명 메서드)에 대해서 더 알고 싶다면, 아래의 웹 사이트를 방문해 보세요.
* http://msdn.microsoft.com/ko-kr/library/0yw3tz5k.aspx
*/
915
// 솔 상intstring을 출력하는 익명 메서드가 여기 나와 있습니다. 이 메서드의 선언부는 //
// MyIntAndString 대리자(위에서 선언한)와 일치하므로
// MyIntAndString 유형의 변수에 이 대리자를 할당할 수 있습니다.
MyIntAndString printThem = delegate(int i, string s)
{ Console.WriteLine("{0} - {1}", i, s); };
printThem(123, "four five six");
// 력 결과: 123 - four five six
// 일한 시그내처(int, string)를 가진 또 다른 익명 메서드가 나와 있는데, 이 메서드는 해당 문자열이 int
// 함하고 있는지 검사합니다.
MyIntAndString contains = delegate(int i, string s)
{ Console.WriteLine(s.Contains(i.ToString())); };
contains(123, "four five six");
// 력 결과: False
contains(123, "four 123 five six");
// 력 결과: True
// 일한 시그네처(int, string)를 가진 또 다른 익명 메서드가 나와 있는데,
// 메서드는 해당 문자열이 int포함하고 있는지 검사합니다.
Delegate d = contains;
d.DynamicInvoke(new object[] { 123, "four 123 five six" });
// 력 결과: True
/*
* 다 표현식(lambda expression)은 => 연산자를 사용하는 특별한 종류의 익명 메서드입니다.
* 다 연산자라고 불리긴 하지만, 일반적으로 “~가 된다(goes to)”라고 읽으므로
* 다 표현식이라는 말을 더 많이 사용합니다. 여기에 간단한 람다 표현식이 나와 있군요.
*
* (a, b) => { return a + b; }
*
* aba 더하b가 된다”라고 읽는데, 이것은 두 값을 더하는 익명 메서드입니다.
* 다 표현식은 매개변수를 가져다 값을 반환하는 익명 메서드라고 생각해도 무방합니다.
*
* 다(표현)식에 대해알고 싶다면, 아래의 웹 사이트를 방문해 보세요.
* http://msdn.microsoft.com/ko-kr/library/bb397687.aspx
*/
// 수를 더하는 람다 표현식이 나와 있는데식의 시그네처는 CombineTwoInts 대리자
// 치하므로, 이를 CombineTwoInts형의 대리자 변수에 할당할 수 있습니다. CombineTwoInts
// int을 반환한다는 점에 주목하세요. 이는 람다 표현식도 int반환해야 한다는 뜻입니다.
CombineTwoInts adder = (a, b) => { return a + b; };
Console.WriteLine(adder(3, 5));
// 력 결과: 8
// 다른 람다 표현식이 있군요. 이번에는 두 수를 곱합니다.
CombineTwoInts multiplier = (int a, int b) => { return a * b; };
Console.WriteLine(multiplier(3, 5));
// 력 결과: 15
// LINQ . .
var greaterThan3 = new List<int> { 1, 2, 3, 4, 5, 6 }.Where(x => x > 3);
foreach (int i in greaterThan3) Console.Write("{0} ", i);
// 력 결과: 4 5 6
Console.ReadKey();
}
}

Get Head First C# (개정3판): 상상을 초월하는 객체지향 C# 학습법 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.