C# 4.0에 대한 윤곽이 나왔었습니다.
 요즘은 C++에 집중하느라고 다른 Language들을 잘 보지 않고 있었는데.. 알고보니 지금 포스팅 하기엔 민망한 소식이기도 합니다.

 C# 4.0에 대한 소개를 보니.. 정말 매력적인 Feature들이 추가되었습니다.
 C# 3.0 때 추가된 Type inference, Lambda expressions, LINQ 등도 꽤나 신선했었는데..
 C# 4.0에 추가된 dynamic keyword나 COM 객체에 사용성 향상 같은 대한 지원은 당장이라도 테스트 어플리케이션을 만들고 싶고, 기존 코드를 고치고 싶게 합니다.


 저기 동영상 중에서 Anders Hejlsberg 아저씨의 PDC 2008에서의 발표는 정말 볼만합니다.
 C# 언어 설계자가 새로 설계한 부분에 대해서 직접 발표를 하다보니 아무래도 흥미롭습니다..


 동영상의 일부분을 보면...


 C# 언어의 발전 과정입니다.
 이제 만든지 10년이 넘었다져..




 C# 4.0의 Language 자체에서 지원되는 변화입니다.
 해당 키워드들에 C#을 붙여서 구글링을 하면 자세한 정보를 얻을 수 있습니다.
 - Dynamically Typed Objects
 - Optional and Named Parameters
 - Improved COM Interoperability
 - Co- and Contra-variance





 C# 4.0 이후에 Compiler를 약간 오픈해서 Meta-Programming에 대한 지원도 강화할 것이라고 합니다.



 데모로 만든 C# Interactive Shell을 보여주는데..
 Winform으로 Windows 하나를 띄우고,
 거기에 Background Image를 입히고,
 Button UI을 추가하고,
 Button을 누르면 Console에 "Hello world" 를 출력하는 이벤트 핸들러를 추가 합니다.

 좀 찾아보니 Mono 2.2에선 이 기능이 추가된 것 같네요.



Posted by U_Seung

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지














Microsoft에서 무료로 e-Book를 PDF버전으로 제공하네요.
아쉽게도 책의 전체가 있는 것은 아니고 일부 내용만 있는 것도 있지만 참고할만한 것 같아서 공유합니다. Bold 표시된 Chapter만 있습니다.


Introducing Microsoft Silverlight 1.0

by Laurence Moroney

Chapter 1: Silverlight and the User Experience
Chapter 2: Silverlight and XAML
Chapter 3: XAML: Transformation and Animation
Chapter 4: Silverlight and Media
Chapter 5: Programming Silverlight with JavaScript
Chapter 6: Using Silverlight with Ink
Chapter 7: Silverlight and Server Programming
Chapter 8: Silverlight Futures


Introducing Microsoft LINQ
by Paolo Pialorsi and Marco Russo

Chapter 1. LINQ Introduction
Chapter 2. C# Language Features
Chapter 3. Visual Basic 9.0 Language Features
Chapter 4. LINQ Syntax Fundamentals
Chapter 5. LINQ to ADO.NET
Chapter 6. LINQ to XML



Introducing Microsoft ASP.NET AJAX
by Dino Esposito

Part I: ASP.NET AJAX Building Blocks
- Chapter 1. The AJAX Revolution
- Chapter 2. The Microsoft Client Library for AJAX
Part II: Adding AJAX Capabilities to a Site
- Chapter 3. The Pulsing Heart of ASP.NET AJAX
- Chapter 4. Partial Page Rendering
- Chapter 5. The AJAX Control Toolkit
Part III: Client-Centric Development
- Chapter 6. Built-in Application Services
- Chapter 7. Remote Method Calls with ASP.NET AJAX
- Chapter 8. Building AJAX Applications with ASP.NET
 




------------------------------

사용자 삽입 이미지


이 책은 Inside C# 2nd의 한글 번역본인데 Full Text와 예제파일을 제공하네요.
무료 치고는 좋은 자료 같습니다. 물론 C# 3.0이 나오기 전이라서 LINQ등의 새로운 부분은 없어서 아쉽긴 하네요.

Part 1 C# 클래스 기초
- Chapter 1 C# 응용 프로그램 및 라이브러리 빌드하기
- Chapter 2 .NET 타입 시스템
- Chapter 3 클래스와 구조체
- Chapter 4 메서드
- Chapter 5 프로퍼티, 배열, 인덱서
- Chapter 6 어트리뷰트
- Chapter 7 인터페이스

Part 2 코드 작성하기
- Chapter 8 수식과 연산자
- Chapter 9 프로그램 흐름 제어
- Chapter 10 String 다루기 및 정규식
- Chapter 11 스트림을 이용한 파일 I/O
- Chapter 12 예외를 이용한 오류 처리
- Chapter 13 연산자 오버로딩과 사용자 정의 변환
- Chapter 14 위임과 이벤트 처리기
- Chapter 15 XML을 이용한 문서화

Part 3 C# 고급 기능 사용하기
- Chapter 16 수치 연산과 Math 클래스
- Chapter 17 컬렉션과 객체 열거
- Chapter 18 멀티쓰레딩과 비동기 프로그래밍
- Chapter 19 리플렉션을 사용하여 메타데이터 정보 조회하기
- Chapter 20 메모리 고정과 관리
- Chapter 21 C# 응용 프로그램에서 COM 사용하기
- Chapter 22 비관리 코드에서 .NET 컴포넌트 사용하기
- Chapter 23 보안
 


Posted by U_Seung

static void Main(string[] args)

{

    var list = new[] { 1, 9, 5, 3, 7, 2 };

    list.WriteLine();

    list.QuickSort().WriteLine();

}


오랜만에 코딩이 들어간 포스팅 이네요
.
잘 모르고 있었는데 C# Functional Feature가 많이 들어 갔더군요
.
그래서 간단히 공부겸 테스트겸 가볍게 코드를 만들어 보고, 이를 공유 합니다
.

만들어본 코드는 Quicksort이며, Main함수의 내용은 위와 같고
,
실행한 결과는 아래와 같습니다.

{ 1, 9, 5, 3, 7, 2 }
{ 1, 2, 3, 5, 7, 9 }


먼저 첫 줄, 별 생각 없이 봐도 integer의 리스트를 만들었다는 것을 알 수 있습니다.

var list = new[] { 1, 9, 5, 3, 7, 2 };

 

다만, 자세히 보면 type이 전혀 선언되지 않았다는 것을 알 수 있습니다.
C# 3.0
에서는 Implicitly typed local variables을 지원해서

javascript
스러운 var a = 3 같은 문법을 지원합니다
.
자세한 것은 문서를 참조 하시고,,,

 

list.WriteLine();

list.QuickSort().WriteLine();

 

두 번째부터 세 번째 줄을 살펴보면 list Object MethodWriteLine() QuickSort()를 호출한 것을 볼 수 있습니다. 여기서 눈 여겨 볼 것은 QuickSort()Writeline()은 원래 있는 Method가 아니라 사용자가 만든 확장 Method라는 겁니다. 여기서 list variable Type Explicit하게 정의 하지 않았지만 C#에서 Type inference를 통해 Type이 결정되는데 여기에서는 int[]로 결정이 되겠지요. , C#에서도 다른 Dynamic Language같이 기존에 존재하는 Type에도 확장 함수(Extension Methods)를 추가할 수 있다는 것 입니다.

 

 

실제 Sort부분의 코드를 보면

 

public static IEnumerable<int> QuickSort(this IEnumerable<int> Ts)

{

    return Ts.Case(

        () => Ts,

        (head, tail) =>

            QuickSort(tail.Where(t => t < head))

            .Concat(new[] { head })

            .Concat(QuickSort(tail.Where(t => t >= head)))

            );

}

 

 

여기서 headtype int, tailtype int[]라는 것을 잘 봐야 합니다. C# 2.0에도 anonymous method가 있었는데 C# 3.0에서는 lambda expressions로 더욱 강화 되었습니다. Type inference feature가 추가 되면서 일일이 Parameters type을 적을 필요가 없게 된 것이 매우 큰 변화라 할 수 있을 것 같습니다. Javascript 등과 비교했을 때도, function(x) { return x; } 라고 지저분하게 적었어야 했는데, 이를 (x) => x 라고 적으면 된다니 코드를 작성하는 입장에서는 매우 반가운 일 입니다.

 

 

아무튼 나머지 코드는.


public static void WriteLine<T>(this IEnumerable<T> Ts)

{

    Debug.Write("{ " + Ts.Head());

    foreach (T t in Ts.Tail())

        Debug.Write(", " + Convert.ToString(t));

    Debug.WriteLine(" }");

}


public static T Head<T>(this IEnumerable<T> Ts)

{

    foreach (T t in Ts)

        return t;

    throw new ArgumentException();

}

 

public static IEnumerable<T> Tail<T>(this IEnumerable<T> Ts)

{

    bool head = true;

    foreach (T t in Ts)

    {

        if (head) head = false;

        else yield return t;

    }

}

 

public static IEnumerable<T> Case<T>(this IEnumerable<T> Ts, Func<IEnumerable<T>> CaseEmpty, Func<T, IEnumerable<T>, IEnumerable<T>> CaseNotEmpty)

{

    if (Ts.Count() > 0)

        return CaseNotEmpty(Ts.Head(), Ts.Tail());

    return CaseEmpty();

}

 

 

참조한 곳은..

C# is a functional programming language

Overview of C# 3.0, C# Version 3.0 Specification

 

------------

 Methods를 좀 뒤져 봤는데.
 Head() 는 First()로
 Tail()은 Skip(1)로 대체할 수 있을 것 같네요.

 

Posted by U_Seung