구독자 여러분 안녕하세요 : )
새벽형 인간도 아닌데 ^^;; 잠이 깨어버렸네요.

인터넷 사용중 MSDN을 검색하다가 좋은 기술 문서를 찾게 되어 다음과 같이 소개를 할까합니다.
이미 아시는분은 아시겠지만 아무래도 C#에 처음 입문하시는분께 도움이 되지 않을까 소개할까 합니다.

그래도 상세한 문서가 4.0이였으면 좋았을텐데.
C# 4.0 문서 : http://msdn.microsoft.com/ko-kr/library/bb383815.aspx
C# 3.0 기술 문서 : http://msdn.microsoft.com/library/bb308966




'.NET Framework > C# 3.0 Quick Look' 카테고리의 다른 글

[C# 3.0] C# 3.0 기술 문서 소개  (6) 2010.09.10
Posted by LenAWeb

댓글을 달아 주세요

  1. 무엇이든지 풍부하다고 반드시 좋은 것은 아니다.

    2013.03.24 14:09 [ ADDR : EDIT/ DEL : REPLY ]
  2. 유능한 사람은 언제나 배우는 사람인것이다.

    2013.03.28 00:09 [ ADDR : EDIT/ DEL : REPLY ]
  3. 아는 것을 안다 하고 모르는 것을 모른다 하는 것이 말의 근본이다.

    2013.03.30 23:46 [ ADDR : EDIT/ DEL : REPLY ]
  4. 아마추어는 남을 상대로 싸우지만 프로는 자신을 상대로 싸운다.

    2013.04.09 04:30 [ ADDR : EDIT/ DEL : REPLY ]
  5. 다른 사람에서 다른 사람의 정신적 활동을 이해하고, 사물을 보는 개념은 자신의 미래에 대해 전혀 걱정할 필요가 없습니다.

    2013.04.10 04:18 [ ADDR : EDIT/ DEL : REPLY ]
  6. 매우 지원, http://ntu.buybluetree.com/ cheap louis vuitton bags, 아주 좋아.

    2013.04.14 04:40 [ ADDR : EDIT/ DEL : REPLY ]

논라운 속도향상과 웹표준 지원으로 웹의 미학을 한 차원 높인 Internet Explorer 9 베타 런칭 행사에 개발자 여러분을 초대합니다. IE에서... HTML5를 만나보세요 : )

사전 등록 : http://msdn.microsoft.com/ko-kr/ff955787.aspx


Posted by LenAWeb

댓글을 달아 주세요

  1. 아름다운 여자가 해바라기하는 걸 좋아해요

    2013.04.02 02:43 [ ADDR : EDIT/ DEL : REPLY ]
  2. 아름다운 여자가 해바라기하는 걸 좋아해요

    2013.04.03 02:21 [ ADDR : EDIT/ DEL : REPLY ]

한국 Visual Studio 공식 팀에서 VISUAL STUDIO이라는 주제로 세미나를 개최하네요 : )
많은 참여 바랍니다.

참가 신청 바로 가기: http://onoffmix.com/event/1787


  • 주최 : 한국 Visual Studio 공식 팀
  • 일시 : 2010년 9월 28일 오후 7시 ~ 10시
  • 장소 : 한국 마이크로소프트 - 포스코 센터 5층
  • 참가비 : 무료
  • 최근 쏟아지는 기술의 홍수 속에서 '아차~' 하고 눈 깜빡할 순간 신기술에 낙오되기 쉽습니다. 한 번은 괜찮지만, 두 번은 기술 트랜드를 따라잡기가 더 힘들어 집니다. 저희 팀에서 기술을 먼저 접해보고, 먼저 고민해본 살아있는 경험을 여러분들에게 전수해 드립니다.

    세미나 아젠다

    시간

    세션 내용

    19:00 ~ 19:30

    등록

    19:30 ~ 20:10

    현실적인 클라우드 컴퓨팅 이야기

    남정현 C# MVP

    20:20 ~ 21:00

    Expression Blend 와 함께하는 윈도우 폰 7 개발 입문

    조진현

    21:10 ~ 21:50

    Razor 로 열어가는 새로운 ASP.NET

    김시원 ASP.NET MVP

      

       

    발표 내용 소개

    현실적인 클라우드 컴퓨팅 이야기 / 남정현 C# MVP

    클라우드 컴퓨팅, 말로만 들어봤지 실제로 어디에 어떻게 사용이 될 수 있는지 알려주는 사람이 없어 답답할 때가 많습니다. 이번 세션에서는 클라우드 컴퓨팅에 관한 실질적인 이야기, 그 중에서도 특별히 마이크로소프트의 윈도 애저 플랫폼에 대한 이야기를 나누면서, 클라우드 컴퓨팅의 현실적인 사례를 간단히 들어보기로 하겠습니다.

      

    Expression Blend 와 함께하는 윈도우 폰 7 개발 입문 / 조진현

    윈도우 폰7 개발에 대한 간단한 소개와 방법에 대해서 살펴본다. 그리고 더 쉽고 편한 개발을 위한 고민을 해보며, 이를 위해서 Expression Blend 의 활용에 대해서 고민해 본다.

      

    Razor 로 열어가는 새로운 ASP.NET - 김시원 ASP.NET MVP

    Razor 는 차세대 ASP.NET 의 새로운 View Engine 으로써 , 이것 때문에 요즈음 ASP.NET 이 한창 주목 받고 있습니다. 이번 시간에는 Razor 의 등장배경과 함께 Razor 로 인해 개발 환경이 어떻게 변화하였는지 살펴보고 , 기본적인 Razor 의 사용법을 익혀보도록 하겠습니다.

    발표자 소개

    남정현 C# MVP

    (주)코아뱅크에 재직 중이며, Microsoft Visual C# MVP로 활동 중입니다. DEVPIA C# Forum SYSOP, Windows Azure Cafe SYSOP을 맡고 있습니다. 여러 커뮤니티와 개인 블로그, 트위터 (@rkttu)를 통하여 윈도 애저 플랫폼에 대한 다양한 이야기를 전파하고 있습니다.

    조진현

    현재 게임 개발자로 재직 중이며  Visual Studio 2010 공식 팀 블로그 (http://vsts2010.net) 에서 DirectX 관련 분야에서 활동 중이다. 최근에는 '김탁구'와 '나는 전설이다' 라는 드라마에 빠져서 살고 있다.

      

     

    김시원 ASP.NET MVP
    ASP/ASP.NET MVP를 2009년 부터 계속 유지해오고 있으며 다양한 형태의 웹 어플리케이션 개발 경험과 세미나 경험을 가지고 있다. 현재 Hugeflow 웹 솔루션 개발팀에서 개발의욕을 불사르고 있다. 세상을 풍요롭게 하고 사람들에게 강한 종속성을 부여하는 프로그램을 개발하는 것이 목표이다.

    오시는 길

    한국 마이크로소프트 - 포스코 센터 5층

     

    참가 신청 바로 가기: http://onoffmix.com/event/1787


  • Posted by LenAWeb

    댓글을 달아 주세요

    1. 매우 지원, 아주 좋아.

      2013.04.05 13:03 [ ADDR : EDIT/ DEL : REPLY ]
    2. 한세계를 놓고 말하면 당신은 한 사람이지만,단 한사람을 놓고 말하면 당신은 그라삼의 세계입니다

      2013.04.06 21:08 [ ADDR : EDIT/ DEL : REPLY ]
    3. 진정한 자신감, 사람들 처음부터 맹인 신뢰 대한 열등감 중간에서 자신감을 사실에 더 자신감이 없습니다.

      2013.04.07 20:24 [ ADDR : EDIT/ DEL : REPLY ]
    4. http://www,Topics related articles:


      http://www.prelude9.com/9 复件 (17) 韩

      .saclongchamle,Topics related articles:


      http://happysunlight.net/435 复件 (11) 韩

      .com/ http://www.cheaptomsshoesl,Topics related articles:


      http://simtech.tistory.com/5 复件 (16) 韩

      .com/

      2013.04.21 18:06 [ ADDR : EDIT/ DEL : REPLY ]
    5. 헤여졌다한들 슬퍼하지마. 이후에 만나게될 더좋은 사람을 위해 항상 웃는얼굴 잃지 말자.
      Topics related articles:


      http://codymall.net/229 新建文章 6

      http://fujixerox.tistory.com/m/243 新建文章 7

      http://heny2kawmi.tistory.com/m/post/view/id/64 新建文章 3

      http://zeroworld.tistory.com/6478 新建文章 11

      2013.05.16 15:16 [ ADDR : EDIT/ DEL : REPLY ]
    6. 당신은 내가사랑할 만한 사람이 아니예요,사랑하지 않으면 안될 사람이예요.

      2013.07.10 23:35 [ ADDR : EDIT/ DEL : REPLY ]


     회차
    [C# 4.0] New Features in C# : 01. C# Programing Trend
    [C# 4.0] New Features in C# : 02. C# 4.0 Overview
    [C# 4.0] New Features in C# : 03. Dynamically Typed Objects #1 : DLR
    [C# 4.0] New Features in C# : 04. Dynamically Typed Objects #2 : Dynamic Lookup
    [C# 4.0] New Features in C# : 05. Optional and Named Parameters
    [C# 4.0] New Features in C# : 06. Com-specific interop features
    [C# 4.0] New Features in C# : 07. Covariance and Contravariance

    07| 공변성과 반공변성(Covariance and Contravariance)
    구독자 여러분 안녕하세요

    오늘 다뤄볼 내용은 공변성과 반공변성입니다.
    " 공변성, 반 공변성은 도대체 뭘까? "  Variance & ContraVariance 두단어를 볼 때 무슨 소리인지 알 수가 없을것입니다.


    물론 수학을 많이 다뤄보셨다면 무슨 의미인지 알 수는 있지만 대부분의 개발자분들은 무심코 지나치셨거나 모른체 사용을 해왔을 것 같네요. 공변성, 반공변성은 수학에서 정의한 원리를 바탕으로 부모는 자식을 받아 드일수 있으나 자식은 부모를 받아 드릴 수 없는 원칙을 말하고 있습니다.


    즉, 공변성은 원래 지정된 것 보다 더 많은 파생을 사용할수 있는 이며, 반공변성은 더 작은 파생 형식을 사용 할 수 있는 기능을 뜻합니다.

    말이 어렵죠? 이해를 돕고자 일반적인 프로그래밍 이야기를 해보도록 하겠습니다. 클래스의 상속은 부모 클래스로부터 상속을 받아 메소드나 멤버 변수를 그대로 물려 받을 수 있을 텐데요.

    자식은 양적으로 부모보다 더 많이 가지게 되며 반면에 부모클래스는 상속받은 자식과 비교를 한다면 적게 가진다는 결론을 내릴수 있습니다.

    그렇다면 부모 클래스에 자식 클래스를 캐스팅 한다면 어떻게 될까요?

    다형성 원칙에 의해 부모 클래스를 가지고 있는 기능을 제외한 추가된 자식의 기능은 무시가 되버리고 어쨌든 문제는 없어 보입니다. 반대로 자식을 부모에 대입하려고 한다면 형 변환에 대한 예외에러가 출력이 되겠죠. 지금부터 Genric covariance And Contra-Variance에 대해 설명을 하려면 그동안 어떻게 개선이 되고 있었는지 살펴보아야할것 같습니다.

    * Variance in Arrays (C# 1.0)
    C# 1.0에서부터 variance in Arrays라는 개념이 등장하게 되었습니다.

    [코드 1] Variance in Arrays (C# 1.0) Sample
    public class Animal { ... }
    public class Lion : Animal { ... }
    public class Deer : Animal { ... }
    public class Cat : Animal { ... }

    Animal[] animals = new Lion[3];
    Animals[0] = new Deer();                      // Runtime시 Exception 발생

    현재 보시는 코드는 전형적인 상속이 되는 코드입니다. 1.0에서는 위와 같이 Reference 타입을 할당하려고 할 때 covariance라고 하였습니다. Animal로 부터 상속  받은 사자와 사슴과 고양이는 Animal 스택틱 영역에  객체로 할당 할 수 있습니다.

    여기서 살펴보셔야할 내용은 마지막 두번째 줄 코드인데요.
    Animals 인스턴스에 사자를 할당을 하려고 하고 있는데. 이어서 마지막 코드에서 사자 우리에 사슴을 할당하려고 합니다.

    일반적으로 사자 우리에 사슴을 넣으면 안되잖아요. 그럼 잡혀먹히잖아요...흑흑..ㅠㅠ


    이처럼 C# 1.0 버전에서는 타입에 대한 불확실한 요소에 대해 보호 할 수 없었습니다. 

    * Variance in Delegate-Member Association(C# 2.0)
    그렇게 C# 2.0에서 제네릭과 대리자가 도입이 되면서 이전 버전의 불안정한 요소를 벗어 날 수 있게 되었습니다.
    이들을 통해서 컴파일 타임에서 엄격한 체크가 수행이 되었고 안전한 코드를 작성 할 수 있게 되었습니다. 하지만 이때부터 공변성과 반공변성은 애매모한 관계를 가지게 되었죠.

    코드를 보시면서 좀더 이해를 해보도록 하겠습니다.

    [코드 2] Variance in Delegate-Member Association(C# 2.0) Sample
    class Mammals { ... }
    class Dogs : Mammals { ... }
    public delegate Mammals HandlerMethod();
    public static Mammals FirstHandler() { return null; }
    public static Dogs SecondHandler() { return null; }

    public Form1() {
                 InitializeComponent();
     1)....   HandlerMethod handler = SecondHandler;
     2)....   this.textBox1.KeyDown += this.MultiHandler;
     3)....   this.button1.MouseClick += this.MultiHandler;

    }
    private void MultiHandler(object sender, System.EventArgs e) { ... }

    현재 코드에서는 1번의 경우가 공변성이 되며, 2,3번의 경우는 반공변성이 되는 예제입니다.

    * 1번의 경우
    대리자를 사용한 경우입니다만 대리자 자신이 포함 할 수 있는 형식인 Mammals에 대해서만 해석을 할 수 가 있기 때문에 공변성 이락 할수 있습니다.

    * 2,3번의 경우
    이미 선언된 형식에 호환성을 맞추기 위해서 역으로 해석한 모습을 볼 수가 있는데요. EventArgs로부터 KeyEventArgs와 MouseEventArgs로 역으로 호환성을 맞추려고 하기 때문에 반공변성이 될 수 있습니다.

    * Variance in Generic Delegate (C# 3.0)
    그렇게 2.0에서 애모한 관계를 개선하고자 3.0이 등장을 하게 되었는데요.
    이때는 제네렉과 대리자를 통해 공변성이 많이 지원이 되었습니다. 이말은 상위 클래스가 존재를 한다면 하위 클래스가 상위 클래스를 모두 가져 올 수 있도록 IEnumerable 인터페이스를 사용할수 있게 되어 covariance를 지원 하게 되었습니다.

    지원을 하였지만 아래코드를 보시면 공변성에 대한 모순이 발생을 하게 되었습니다.
    [코드 3] Variance in Generic Delegate (C# 3.0) Exception Sample
    IList<string> strings = new List<string>();
    IEnumberable<object> objects = strings;           ... 1)  // Exception 발생
    var result = string.Union(objects);                    ... 2)  // Exception 발생


    1번과 2번의 경우 공변성을 하려고 하는데 Exception이 발생되는 모습을 볼 수 있었습니다.

    * Generic Covariance And Contra Variance(C# 4.0)
    3.0에서 발생하게 된 이슈를 해결 하기 위해 4.0에서는 Generic Covariance And Contra Variance이 등장하게 됩니다.
    코드를 보시면 새로운 형식을 볼 수 있을텐데요.

    [코드 4] Generic Covariance And Contra Variance(C# 4.0) Sample
    class Animal {}
    class Cat : Animal { }
    class Program
    {
           delegate void ActionDemo<in T>(T a);
           delegate T FuncDemo<out T>();

            static void Main()
            {
                    //Contra-Variance
                    ActionDemo<Animal> act1 = (ani) => { Console.WriteLine(ani); };
                    ActionDemo<Cat> cat1 = act1;
                    cat1(new Cat());

                    //CoVariance
                    FuncDemo<Cat> cat = () => new Cat();
                    FuncDemo<Animal> animal = cat;

                    Console.WriteLine(animal());
            }
    }

    3.0에서 모순이 된 IEnumberable 인터페이스의 문제를 해결하면서 애모했던 공변성과 반공변성에 대해 새로운 형식인 IN, OUT 키워드를 도입하면서 관계를 해소 할 수 있게 되었습니다.

    - Contra-Variance를 하시려면 IN 키워드를 사용
    - Co-Variance를 하시려면 OUT 키워드를 사용

    그외 인터페이스와 델리게이트는 다음과 같으며 자세한 사항은 MSDN 문서를 참고 바랍니다.

    * InterFaces
    - System.Collections.Generic.IEnumberable<out T>
    - System.Collections.Generic.IEnumberator<out T>
    - System.Linq.IQueryable<out T>
    - System.Collections.Generic.IComparer<in T>
    - System.Collections.Generic.IEqualityComparer<in T>
    - System.IComparable<int T>

    * Delegates
    - System.Func<int T, ..., out R>
    - System.Action<in T, ...>
    - System.Predicate<in T>
    - System.Comparison<in T>
    - System.EventHandler<in T>

    [소스 참고]Hello .NET Framework 4 세미나 [세션3] 발표자료와 소스 : http://blog.tobegin.net/35

    참고 문헌
    1. PDC2008 : The Future of C# - Anders Hejlsberg
        : http://channel9.msdn.com/pdc2008/TL16/

    2. New Features in C# 4.0 - Mads Torgersen, C# Language PM, April 2010
        :
    http://msdn.microsoft.com/ko-kr/vcsharp/ff628440(en-us).aspx
    3. 제네릭의 공변성(Covariance)과 반공변성(Contravariance)
        :
    http://msdn.microsoft.com/ko-kr/library/dd799517.aspx


    포스팅을 마치며...

    유익한 포스팅이 되셨는지 모르겠네요.

    더 궁금하신점이 있으시면 댓글 혹은
    http://blog.tobegin.net/notice/1 프로필정보를 통해 문의 바랍니다.
    감사합니다.

    정은성 드림

    PS. 이번주는 태풍이 온다네요. 우산 꼭 챙기세요 ^ㅁ^
    Posted by LenAWeb

    댓글을 달아 주세요

    1. 아름다운 여자가 해바라기하는 걸 좋아해요

      2013.04.02 03:42 [ ADDR : EDIT/ DEL : REPLY ]
    2. 아름다운 여자가 해바라기하는 걸 좋아해요

      2013.04.03 03:19 [ ADDR : EDIT/ DEL : REPLY ]
    3. 사람들은 죽을걸 알면서도 살잖아 .사랑은 원래 유치한거에요

      2013.04.26 15:50 [ ADDR : EDIT/ DEL : REPLY ]
    4. 눈을 감아봐 입가에 미소가 떠오르면 네가 사랑하는 그 사람이 널 사랑하고 있는거야.

      2013.04.28 14:34 [ ADDR : EDIT/ DEL : REPLY ]

     회차
    [C# 4.0] New Features in C# : 01. C# Programing Trend
    [C# 4.0] New Features in C# : 02. C# 4.0 Overview
    [C# 4.0] New Features in C# : 03. Dynamically Typed Objects #1 : DLR
    [C# 4.0] New Features in C# : 04. Dynamically Typed Objects #2 : Dynamic Lookup
    [C# 4.0] New Features in C# : 05. Optional and Named Parameters
    [C# 4.0] New Features in C# : 06. Com-specific interop features
    [C# 4.0] New Features in C# : 07. Covariance and Contravariance

    06| COM특성 상호운용 개선사항
    (
    COM-Specific Interop. Improvements)

    구독자 여러분 안녕하세요

    이번 다뤄볼 내용은 바로 COM특성 어떻게 향상 되었는지 개선사항에 대해 알아보도록 하겠습니다.
    COM은 소프트웨어 컴포넌트를 통합을 위해서 표준화된 인터페이스로  다양한 언어로 만들어 다른 소프트웨어와 공유를 할수 있도록 이진 레벨을 구성하고 있습니다. 대중화된 OS인 윈도우에서도 굉장히 많이 사용하고 있는데요.


    흔히 오피스 오토메이션 프로그래밍을 할때 Office API에 관련된 PIA를 등록하여 실행 때마다 PIA에 맵핑되는 타입으로 형변환을 해주어야하며 성능상으로 좋지 않았습니다.

    C# 4.0에서는 가져온 PIA 형식 정보 대신 포함된 형식 정보를 응용 프로그램에 포함시켜 배포를 할수 있게 되었습니다.
    코드를 보시면서 살펴보도록 하겠습니다.

    [코드 1] COM-Specific Interop Sample Fx4 이하
    var missing = System.Type.Missing;
    Excel.Workbook workBook =
                                 excel.Workbooks.Open("filename.xlsx",  missing, missing, missing, missing,
                                 missing, missing, missing, missing, missing, missing, missing, missing, missing,missing);             Excel.Worksheet workSheet =  (Excel.Worksheet)workBook.ActiveSheet;

     지금보시는 코드[코드 1]는 MS 오피스 프로그램의 오토메이션 되는 코드 조각입니다.
    코드를 보시면 단순히 시트 하나를 Open 할 뿐인데 코드가 매우 복합한데다가 알 수 없는 타입과 함께 작성을 해줘야 하는 모습을 볼 수 있습니다. 전체 코드 작성된 기준으로 본다면 WorkSheet를 포함하여 ExcelApplication.WorkBook등 모두 기술을 했다면 코드가 생각보다 길어질것입니다.

    또한 코드가 길어지는건 두번째로 볼때 코딩을 작성하다보면 도대체 이 인수가 어떻게 사용되는지 모를 뿐만 아니라 사용하지 않는 파라메터에 대해서는 ref 처리를 해줘야하는 불편한 개발을 할 수 밖에 없었는데요.
    기존 VB개발자시라면 " 아 불편해!!! " 라고 생각이 드실겁니다.

    그렇다면 Com 상호운용성이 어떻게 개선이 됬는지 확인 해보도록 하겠습니다.

    [코드 2] COM-Specific Interop Sample Fx4
    Excel.Workbook workBook = excel.Workbooks.Open("filename.xlsx“);
    Excel.Worksheet workSheet =workBook.ActiveSheet;

    와우 많고 불필요한 코드들이 단 두 줄로 줄어들었습니다. Option Parameters기능을 활용하여 정말 간소화 된 모습을 볼 수 있는데요. 어떤 내용들이 개선이 되었는지 스펙을 확인해보도록 하겠습니다.

    * COM 상호 운용의 개선된 사항 
    - Automatic Object -> dynamic mapping
    - Optional and Named Parameters
    - Indexed properties
    - Optional “ref” modifier
    - PIA embedding (“NO-PIA”)

    COM 상호운용성이 위와 같이 개선이 되었습니다. 우선 Automatic Object 방법이 Dynamic mapping으로 변경이 되었고
    Optional and named Parameters 기능이 지원함으로써 메소드가 간소화 된 모습을 볼수 있습니다.이 말은 이전에 사용하지 않던 매개변수에 대해서 ref missing을 처리를 해주었는데요. 이제는 사용을 안하셔도 된다는 이야기입니다. 그리고 기존의 오피스 프로그래밍을 하시다보면 PIA라는 인터페이스의 정의를 참조하여 호출을 하였고 어떤 인터페이스를 사용 할지 알수 없었기 때문에 형변환을 해줘야하는 지져분한 코드를 사용해야 만 했었고 더구나 성능상으로 좋지 않았습니다.

    이제는 컴파일 타임에서 PIA를 직접적으로 사용하지 않으셔도 됩니다. PIA형식 정보를 응용프로그램에 포함 시키는 기능이 새롭게 추가 되었습니다. 즉, 해당 어셈블리에 대해서 옵션을 지정 할 수 있는데요.
    Embed introp Type 을 지정해주므로써 필요한 PIA 인터페이스를 코드에 삽입하므로써 COM 객체와 좀더 퍼펙트한 상호 운용이 가능하게 되었습니다.

    그럼 간단한 코드를 통해서 알아보도록 하겠습니다.

    [코드 3] COM-Specific Interop Sample Fx4 이하
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    using Excel = Microsoft.Office.Interop.Excel;
    using Word = Microsoft.Office.Interop.Word;

    namespace HelloFx4_3_OfficeAutomaticSample
    {
        class Program
        {
            static void Main(string[] args)
            {
                var excel = new Excel.Application();
                excel.Workbooks.Add(Type.Missing);
                excel.Visible = true;
                ((Excel.Range)excel.Cells[1, 1]).Value2 = "Process Name";
                ((Excel.Range)excel.Cells[1, 2]).Value2 = "Memory Usage";
                var processes =
                        from p in Process.GetProcesses()
                        orderby p.WorkingSet64 descending
                        select p;
                 int i = 2;
                 foreach (var p in processes.Take(10))
                {
                    ((Excel.Range)excel.Cells[i, 1]).Value2 = p.ProcessName;
                    ((Excel.Range)excel.Cells[i, 2]).Value2 = p.WorkingSet64;
                    i++;
                }
                Excel.Range range = (Excel.Range)excel.Cells[1, 1];
                Excel.Chart chart = (Excel.Chart)excel.ActiveWorkbook.Charts.Add(
                                                      Type.Missing, excel.ActiveSheet, Type.Missing, Type.Missing);             
                chart.ChartWizard(
                    range.CurrentRegion,
                    Type.Missing, Type.Missing, Type.Missing,
                    Type.Missing, Type.Missing, Type.Missing,
                    "Memory Usage in " + Environment.MachineName, Type.Missing,
                    Type.Missing, Type.Missing);

                    chart.CopyPicture(Excel.XlPictureAppearance.xlScreen,
                                               Excel.XlCopyPictureFormat.xlBitmap,
                                               Excel.XlPictureAppearance.xlScreen);
                var word = new Word.Application();
                word.Visible = true;
                var missing = Type.Missing;
                word.Documents.Add(ref missing, ref missing, ref missing, ref missing);
                word.Selection.Paste();
            }
        }
    }

    [코드 3-1] (코드3) 코드 조각
    var excel = new Excel.Application();
    excel.Workbooks.Add(Type.Missing);
    excel.Visible = true;

    ((Excel.Range)excel.Cells[1, 1]).Value2 = "Process Name";
    ((Excel.Range)excel.Cells[1, 2]).Value2 = "Memory Usage";


    코드를 보시면 excelApplication를 인스턴스화 하여 위에 WorkBooks를 추가하였고 셀 1,1과 1,2에 문자열을 대입하였습니다. 

    [코드 3-2] (코드3) 코드 조각
    var processes =
        from p in Process.GetProcesses()
        orderby p.WorkingSet64 descending
        select p;
    int i = 2;
    foreach (var p in processes.Take(10))
    {
        ((Excel.Range)excel.Cells[i, 1]).Value2 = p.ProcessName;
        ((Excel.Range)excel.Cells[i, 2]).Value2 = p.WorkingSet64;

        i++;
    }

    그리고 현재 컴퓨터의 운영중인 프로세스를 조회한 다음 링큐와 enumable 타입을 사용하여 각 셀에 바인딩하는 모습도 볼수 가 있습니다. 다음으로는 차트 생성 메소드를 활용하여 차트를 생성하고 새로운 워드 문서에 차트 이미지를 복사를 하는 데이터 플로우 입니다.

    [코드 3-3] (코드3) 코드 조각
    Excel.Chart chart = (Excel.Chart)excel.ActiveWorkbook.Charts.Add(
    Type.Missing, excel.ActiveSheet, Type.Missing, Type.Missing);

    chart.ChartWizard( range.CurrentRegion, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    "Memory Usage in " + Environment.MachineName, Type.Missing, Type.Missing, Type.Missing);

    chart.CopyPicture(Excel.XlPictureAppearance.xlScreen,
          Excel.XlCopyPictureFormat.xlBitmap,
          Excel.XlPictureAppearance.xlScreen);

    var word = new Word.Application();
    word.Visible = true;
    var missing = Type.Missing;
    word.Documents.Add(ref missing, ref missing, ref missing, ref missing);
    word.Selection.Paste();

    지금부터 개선된 특징을 적용 시켜야 할텐데요. 우선 그 대상이 무엇인지 살펴보면서 코드를 변경 해보도록 하겠습니다.
    여러분들은 코드 3-1, 3-2, 3-3에서 블록 처리 되어 있는 코드를 살펴보시면 됩니다.

    우선 [코드3-1]에 workbook에 Add 메소드에 매개변수가 그 변경 대상이 되며 다음으로는 형변환을 포함하여 Value2 프로퍼티가 변경 대상이 되며 다음과 같이 수정을 할 수 있습니다.

    [코드 4-1] (코드 3-1)을 Fx4 특징으로 변경 
    var excel = new Excel.Application();
    excel.Workbooks.Add(Type.Missing);
    excel.Workbooks.Add();
    excel.Visible = true;

    ((Excel.Range)excel.Cells[1, 1]).Value2 = "Process Name";
    ((Excel.Range)excel.Cells[1, 2]).Value2 = "Memory Usage";

    excel.Cells[1, 1].Value = "Process Name";
    excel.Cells[1, 2].Value = "Memory Usage";


    [코드3-2]에서 foreach문 내부의 range 부분도 또한 다음과 같이 수정이 가능합니다.

     [코드 4-2] (코드3-2)을 Fx4 특징으로 변경 
    var processes =
        from p in Process.GetProcesses()
        orderby p.WorkingSet64 descending
        select p;
    int i = 2;
    foreach (var p in processes.Take(10))
    {
        ((Excel.Range)excel.Cells[i, 1]).Value2 = p.ProcessName;
        ((Excel.Range)excel.Cells[i, 2]).Value2 = p.WorkingSet64;

        excel.Cells[i, 1].Value = p.ProcessName;
        excel.Cells[i, 2].Value = p.WorkingSet64;

        i++;
    }

    [코드3-3] 차트에서도 형변환을 포함하여 Add 메소드에 매개변수인  missing, activeSheet, Missing, Missing 인자들도 그 변경 대상이 됩니다. 표현하고자 하는 데이터는 두번째 매개변수이며 파라미터 명칭을 찾아보시면 After이름을 가졌네요.

    [그림 1] (코드3-3) Charts.Add 인첼리스트

    [코드 4-3] (코드3-3)을 Fx4 특징으로 변경
    Excel.Chart chart = (Excel.Chart)excel.ActiveWorkbook.Charts.Add(
    Type.Missing, excel.ActiveSheet, Type.Missing, Type.Missing);

    Excel.Chart chart = excel.ActiveWorkbook.Charts.Add(After: excel.ActiveSheet);


    코드를 다시 내려다 보시면 알수 없는 타입이 선언 되어 있는데요.
    (Type.Missing, Type.Missing, Type.Missing, Type.Missing....)  이 코드 또한 변환 대상이 됩니다.

    똑같이 적용을 해보면 다음과 같습니다.

    [코드 4-4] (코드3-3)을 Fx4 특징으로 변경
    chart.ChartWizard( range.CurrentRegion, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    "Memory Usage in " + Environment.MachineName, Type.Missing, Type.Missing, Type.Missing);
    chart.ChartWizard(Source: range.CurrentRegion, Title: "Memory Usage in " + Environment.MachineName);

    [그림 2] (코드3-3) chart.ChartWizard 인첼리스트



    다시 아래 코드를 보시면 새로운 워드 문서를 추가하는 코드를 볼수 있습니다.
    missing 타입을 ref 형태로 전달을 하기에 이것 또한 변경을 해줘야겠죠?

    [코드 4-5] (코드3-3)을 Fx4 특징으로 변경
    var word = new Word.Application();
    word.Visible = true;
    var missing = Type.Missing;
    word.Documents.Add(ref missing, ref missing, ref missing, ref missing);

    word.Documents.Add();

    word.Selection.Paste();

    이렇게 코드를 다시 정리를 해보면 다음과 같습니다.
    [코드 5] COM-Specific Interop Sample Fx4
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    using Excel = Microsoft.Office.Interop.Excel;
    using Word = Microsoft.Office.Interop.Word;

    namespace HelloFx4_3_OfficeDynamicMappingSample
    {
        class Program
        {
            static void Main(string[] args)
            {
                var excel = new Excel.Application();
                excel.Workbooks.Add();
                excel.Visible = true;
                excel.Cells[1, 1].Value = "Process Name";
                excel.Cells[1, 2].Value = "Memory Usage";

                var processes =
                        from p in Process.GetProcesses()
                        orderby p.WorkingSet64 descending
                        select p;

                int i = 2;
                foreach (var p in processes.Take(10))
                {
                    excel.Cells[i, 1].Value = p.ProcessName;
                    excel.Cells[i, 2].Value = p.WorkingSet64;
                    i++;
                }

                Excel.Range range = excel.Cells[1, 1];
                Excel.Chart chart = excel.ActiveWorkbook.Charts.Add(After: excel.ActiveSheet);

                chart.ChartWizard(Source: range.CurrentRegion, Title: "Memory Usage in " + Environment.MachineName);

                chart.CopyPicture(Excel.XlPictureAppearance.xlScreen,
                       Excel.XlCopyPictureFormat.xlBitmap,
                       Excel.XlPictureAppearance.xlScreen);

                var word = new Word.Application();
                word.Visible = true;

                word.Documents.Add();
                word.Selection.Paste();
            }
        }
    }

    정리를 하였지만 아직 PIA 인터페이스를 응용 프로그램에 포함시키지 않았습니다.

    내장하려면 참조되고 있는 어셈블리어 Excel, word, Core등의 어셈블리어를 선택하시고 프로퍼티에 Embed Interop Type 옵션을 True로 변경 해야합니다. 

    [그림 3] Embed Interop Type 설정


    이렇게 True로 설정하게 되면 컴파일 타임에서 등록해야하는 레지스터리를 사전에 코드에 내장을 하여 불필요한 타입 패턴을 일치 하실 필요가 없으며 런타임 시점에서 dynamic mapping을 하게 됩니다.

    [소스 참고]Hello .NET Framework 4 세미나[세션3] 발표자료와 소스 : 
    http://blog.tobegin.net/35

    참고 문헌
    1. PDC2008 : The Future of C# - Anders Hejlsberg
        : http://channel9.msdn.com/pdc2008/TL16/

    2. New Features in C# 4.0 - Mads Torgersen, C# Language PM, April 2010
        :
    http://msdn.microsoft.com/ko-kr/vcsharp/ff628440(en-us).aspx
    3. 방법: Visual C# 2010 기능을 사용하여 Office Interop 개체에 액세스(C# 프로그래밍 가이드)
        :
    http://msdn.microsoft.com/ko-kr/library/dd264733.aspx


    포스팅을 마치며...

    짧게 리뷰를 해보았는데요. 어떠셨는지 모르겟어요 ^^;
    제법 강력해졌다라고 표현을 해드리고 싶습니다. 또한 NO-PIA 옵션으로 하위 버전에서 해당 구문이 실행이 가능하다는 사실 잊지마시구요 이제 NO-PIA 옵션을 활용 해보세요 : )

    더 궁금하신점이 있으시면 댓글 혹은
    http://blog.tobegin.net/notice/1 프로필정보를 통해 문의 바랍니다.

    다음 포스팅은 공변성과 반공변성(Co-Variance and Contra-Variance)에 대해서 살펴보도록 하겠습니다.
    감사합니다.

    정은성 드림


    PS. 이번주는 태풍이 온다네요. 우산 꼭 챙기세요 ^ㅁ^
    Posted by LenAWeb

    댓글을 달아 주세요

    1. 매우 지원, 아주 좋아.

      2013.04.05 16:27 [ ADDR : EDIT/ DEL : REPLY ]
    2. 헤여졌다한들 슬퍼하지마. 이후에 만나게될 더좋은 사람을 위해 항상 웃는얼굴 잃지 말자.

      2013.04.07 00:43 [ ADDR : EDIT/ DEL : REPLY ]
    3. 당신이 슬퍼 느낄 때 고통, 무슨 내용을 보려면하는 것이 가장 좋습니다. 학습은 천하무적 할 것입니다.

      2013.04.08 00:44 [ ADDR : EDIT/ DEL : REPLY ]
    4. 모든 사람은 죽는다. 하지만 모든 사람이 진정한 삶을 사는 건 아니다.

      2013.04.08 08:21 [ ADDR : EDIT/ DEL : REPLY ]
    5. 당신이 슬퍼 느낄 때 고통, 무슨 내용을 보려면하는 것이 가장 좋습니다. 학습은 천하무적 할 것입니다.

      2013.04.09 21:14 [ ADDR : EDIT/ DEL : REPLY ]
    6. http://www,Topics related articles:


      http://webstoryboy.com/256 复件 (10) 韩

      .xn--6ck2bwcu74pofcq24aotk.com/
      http://www,Topics related articles:


      http://important.tistory.com/420 复件 (10) 韩

      .lisseurghdle,Topics related articles:


      http://www.hanbajo.com/?page=3 复件 (15) 韩

      .com/

      2013.04.22 06:44 [ ADDR : EDIT/ DEL : REPLY ]
    7. 지금은 반짝반짝 빛이 나겠지,, 하지만 시간이 흐르면 그빛은 사라저버릴거야,지금 우리처럼

      2013.04.23 21:02 [ ADDR : EDIT/ DEL : REPLY ]
    8. 슬퍼서 우는거 아니야..바람이 불어서 그래..눈이 셔서..

      2013.07.17 11:39 [ ADDR : EDIT/ DEL : REPLY ]