본문 바로가기

.NET/C#

Language Server Protocol, OmniSharp-Roslyn 빌드 오류 해결 마이크로소프트(Microsoft)는 VSCode 에서 다양한 개발 편의 기능을 제공하기 위한 Language Server Protocol 을 공개했다. 이 프로토콜의 C# 버전이 바로 OmniSharp-Roslyn이 되겠다.그 외에 다양한 언어의 구현체가 등장했는데, 어떤 개발 언어가 구현 되었는지 아래의 링크에서 확인하기 바란다. https://github.com/Microsoft/language-server-protocol/wiki/Protocol-Implementations 필자는 OmniSharp-Roslyn 을 git clone 하고 빌드하게 되면 다음과 같은 오류를 만났다.개발환경 OS: MacOS Sierra Version: 10.12.2 The type initializer for 'Sys.. 더보기
[C# 4.0] Parallel Extension - [2] 병렬 처리 아키텍처 지난 포스트에서 Parallel Extension 과 LINQ 를 이용한 PLINQ 에 대해서 살펴보았습니다. 지난번에 얘기했듯이 Manual Parallelism 는 Parallel Extension 의 성능을 절대 따라올 수 없다고 하였습니다. 왜냐하면, Parallel Extension 은 Manual Parallelism 의 병렬 처리 방식보다 더 복잡하고 정밀한 병렬 처리 알고리즘으로 처리하기 때문입니다. Parallel Extension 이란? Parallel Extension 은 전혀 새로운 것이 아닙니다. C# 3.0 의 LINQ 는 LINQ 쿼리식을 제공하기 위해 새로운 컴파일러(Compiler) 가 필요했습니다. 정확히 말하자면 C# 의 Language Service 의 버전이 업그레이.. 더보기
[C# 4.0] Parallel Extension - [1] 병렬 처리 최근 대부분의 사용자들의 컴퓨터의 사양이 코어2 로 업그레이드 되고 있습니다. CPU 제품에 따라 코어에 대한 아키텍처가 다르지만, 기본적으로 이들 제품은 하나의 컴퓨터에 CPU 가 두 개인 제품들입니다. 인간과 비교하자면 뇌가 두 개인 사람인데 그다지 상상해서 떠올리고 싶지 않네요^^. 컴퓨터는 CPU 두 개를 보다 효율적으로 이용하기 위해 바로 Parallelism Processing(병렬 처리)를 하게 됩니다. 하나의 CPU 의 성능을 향상시키는 방법이 아닌, 두 개의 CPU 에게 작업을 할당함으로써 데이터의 처리 성능을 극대화 시키게 됩니다. 우리에게 익숙한 운영체제인 윈도우(Windows) 의 멀티 쓰레딩(Multi Threading) 을 생각하면 병렬 처리(Parallelism Processi.. 더보기
C# 코드로 GAC 어셈블리 등록하기 C# 코드로 GAC 어셈블리 등록하기 예전에 MSDN Forum 에 자료를 찾던 중에 “C# 코드를 이용하여 GAC 에 어셈블리를 등록할 수 없나요?” 라는 질문을 본적이 있었습니다. 아마, 그때 답변은 엉뚱한 답변들이었죠. 물론, 저도 오늘의 이 코드를 보기 전까지 말이죠^^; 희미하게 기억이 날듯 말듯 합니다만, 그때 답변중의 내용이 RegisterAssembly 였던 것 같기도 합니다. 이 메서드는 COM Interop 에 등록하는 메서드인데 말이죠.. ㅎㅎ 그래서 혼자 생각했었습니다. 배포 시에 GAC 에 어셈블리를 등록할 경우가 생긴다면,, 1. GacUtil 을 리소스에 포함한다. 2. Deploy Project 에서 리소스를 파일로 복원하여, Command Prompt(Process.Star.. 더보기
LINQ 퀴즈 문제 풀어봅시다 Mitsuru 블로그에 재미있는 LINQ 문제가 올라와 있네요.. 문제는 var values1 = newstring[] { "1", "2", "3" }; var values2 = newstring[] { "A", "B" }; var q = ? foreach (var v in q) Console.WriteLine(v); 뭐.. 내가 볼땐 조인하라는 말 같은데,, 저는 나름대로 아래와 같이 풀어 보았습니다. 답은 여러가지 나올 수 있겠죠? 같이 푸실 분은 아래를 보지 마시고, 원문 먼저 보시고 맞춰보세요 ^^ 원문 http://blogs.msdn.com/mitsufu/archive/2008/08/07/gq08-ii-combinaisons.aspx var values1 = new string[] { "1", .. 더보기
.NET Framework 2.0 에서 LINQ TO Object 사용하기 이전에 LINQ 에 대한 자료를 찾던 중 .NET Framework 2.0 으로 작성되어진 LINQ To Object 라이브러리를 찾아놓은 적이 있습니다. 최근에 다른곳에 신경을 쓰다보니, 이제서야 이 자료를 공유하고자 합니다. .NET Framework 2.0 으로 작성된 코드는 List source = new List(); source.Add("Rhapsody Of Fire"); source.Add("TYR"); source.Add("Echo of Dalriada"); source.Add("Finntroll"); source.Add("Finntroll3"); source.Add("Finntroll2"); source.Add("Finntroll1"); source.Add("Finntroll4"); //.. 더보기
Custom LINQ Provider - [5]. LINQ To Naver Open API 1. Custom LINQ Provider – [1]. 소개 2. Custom LINQ Provider – [2]. Custom LINQ Provider 만들기 (IQueryable) 3. Custom LINQ Provider - [3]. Custom LINQ Provider 만들기 (IQueryProvider) 4. Custom LINQ Provider – [4]. Query(쿼리)를 이용한 원격 개체 탐색 5. Custom LINQ Provider – [5]. LINQ To Naver Open API 소스 코드 다운로드시 코드의 Naver Open API Key 를 변경하여 사용하시기 바랍니다. 드디어 5회차까지 왔네요. 이전까지는 Custom LINQ Provider 를 만들기 위해 몸풀기 과정이었.. 더보기
Custom LINQ Provider - [4]. Query(쿼리)를 이용한 원격 개체 탐색 [.NET/C# 3.0] - Custom LINQ Provider - [1]. 소개 [.NET/C# 3.0] - Custom LINQ Provider - [2]. Custom LINQ Provider 만들기 (IQueryable) [.NET/C# 3.0] - Custom LINQ Provider - [3]. Custom LINQ Provider 만들기 (IQueryProvider) [.NET/C# 3.0] - Custom LINQ Provider - [4]. Query(쿼리)를 이용한 원격 개체 탐색 [.NET/C# 3.0] - Custom LINQ Provider - [5]. LINQ To Naver Open API 이번에는 쿼리를 이용하여 원격 개체 탐색을 하는 방법에 대해서 알아보겠습니다. 이 파트.. 더보기
Custom LINQ Provider - [3]. Custom LINQ Provider 만들기 (IQueryProvider) [.NET/C# 3.0] - Custom LINQ Provider - [1]. 소개 [.NET/C# 3.0] - Custom LINQ Provider - [2]. Custom LINQ Provider 만들기 (IQueryable) [.NET/C# 3.0] - Custom LINQ Provider - [3]. Custom LINQ Provider 만들기 (IQueryProvider) [.NET/C# 3.0] - Custom LINQ Provider - [4]. Query(쿼리)를 이용한 원격 개체 탐색 [.NET/C# 3.0] - Custom LINQ Provider - [5]. LINQ To Naver Open API 지난 시간에 이어, 이번 시간에는 실제 Provider 를 구현해 보도록 하겠습니다. .. 더보기
Custom LINQ Provider - [2]. Custom LINQ Provider 만들기 (IQueryable) [.NET/C# 3.0] - Custom LINQ Provider - [1]. 소개 [.NET/C# 3.0] - Custom LINQ Provider - [2]. Custom LINQ Provider 만들기 (IQueryable) [.NET/C# 3.0] - Custom LINQ Provider - [3]. Custom LINQ Provider 만들기 (IQueryProvider) [.NET/C# 3.0] - Custom LINQ Provider - [4]. Query(쿼리)를 이용한 원격 개체 탐색 [.NET/C# 3.0] - Custom LINQ Provider - [5]. LINQ To Naver Open API 이전 시간에 Custom LINQ Provider 에 대해서 살며시 알아보았습니다. 이.. 더보기
Custom LINQ Provider - [1]. 소개 [.NET/C# 3.0] - Custom LINQ Provider - [1]. 소개 [.NET/C# 3.0] - Custom LINQ Provider - [2]. Custom LINQ Provider 만들기 (IQueryable) [.NET/C# 3.0] - Custom LINQ Provider - [3]. Custom LINQ Provider 만들기 (IQueryProvider) [.NET/C# 3.0] - Custom LINQ Provider - [4]. Query(쿼리)를 이용한 원격 개체 탐색 [.NET/C# 3.0] - Custom LINQ Provider - [5]. LINQ To Naver Open API LINQ 의 출연 정말 .NET 이라는 세상이 많이 좋아진 것 같습니다. 강력한 Vis.. 더보기
[C# 4.0] Parallel Extension - [3] TPL(Task Parallel Library) Task Parallel Library Parallel Extension 은 PLINQ 와 더불어 확장 가능한 Task Parallel Library 를 제공합니다. Task Parallel Library 는 PLINQ 를 이용하지 않고 개별적이고 수동적인 병렬 처리 작업을 위해 사용할 수 있습니다. Task Parallel Library 는 크게 세 가지 방법으로 병렬 처리를 위한 Library 를 제공합니다. Loops [그림1] Parallel.For 를 이용한 병렬 처리 [그림2] Parallel.Foreach 를 이용한 병렬 처리 Task Parallel Extension 으로 병렬 처리를 쉽게 처리할 수 있으며, 병렬 처리로 인자값을 넘기거나 하는 작업을 쉽게 할 수 있습니다. Statemen.. 더보기
실전 event [6] - 취소 가능한 버튼 서버컨트롤 활용 실전 event 목차 [.NET/C#] - 실전 event [1] - 이벤트 시작하기 [.NET/C#] - 실전 event [2] - 유저컨트롤에서 페이지로 이벤트로 값 전달 [.NET/C#] - 실전 event [3] - 취소 가능한 이벤트란 [.NET/C#] - 실전 event [4] - 취소 가능한 이벤트 만들기 [.NET/C#] - 실전 event [5] - 취소 가능한 버튼 서버컨트롤 만들기 [.NET/C#] - 실전 event [6] - 취소 가능한 버튼 서버컨트롤 활용 이벤트 관련 글 : [.NET/C#] - Reflection 을 통한 Event 제어 ButtonEx 컨트롤의 활용 5회차에서 빡시게 ButtonEx 서버 컨트롤을 만들어 보았습니다. 취소 가능한 이벤트를 통해 만든 서버 컨트.. 더보기
실전 event [5] - 취소 가능한 버튼 서버컨트롤 만들기 실전 event 목차 [.NET/C#] - 실전 event [1] - 이벤트 시작하기 [.NET/C#] - 실전 event [2] - 유저컨트롤에서 페이지로 이벤트로 값 전달 [.NET/C#] - 실전 event [3] - 취소 가능한 이벤트란 [.NET/C#] - 실전 event [4] - 취소 가능한 이벤트 만들기 [.NET/C#] - 실전 event [5] - 취소 가능한 버튼 서버컨트롤 만들기 [.NET/C#] - 실전 event [6] - 취소 가능한 버튼 서버컨트롤 활용 이벤트 관련 글 : [.NET/C#] - Reflection 을 통한 Event 제어 실전 취소 가능한 버튼 컨트롤 만들기 Umc.Core.EventHandlerDictionary 클래스 이 클래스는 Umc.Core 프로젝트에.. 더보기
실전 event [4] - 취소 가능한 이벤트 만들기 실전 event 목차 [.NET/C#] - 실전 event [1] - 이벤트 시작하기 [.NET/C#] - 실전 event [2] - 유저컨트롤에서 페이지로 이벤트로 값 전달 [.NET/C#] - 실전 event [3] - 취소 가능한 이벤트란 [.NET/C#] - 실전 event [4] - 취소 가능한 이벤트 만들기 [.NET/C#] - 실전 event [5] - 취소 가능한 버튼 서버컨트롤 만들기 [.NET/C#] - 실전 event [6] - 취소 가능한 버튼 서버컨트롤 활용 이벤트 관련 글 : [.NET/C#] - Reflection 을 통한 Event 제어 CancelEventArgs 클래스 CancelEventArgs 는 .NET Framework 이 제공하는 클래스 입니다. 이 클래스는 특정.. 더보기
실전 event [3] - 취소 가능한 이벤트란 실전 event 목차 [.NET/C#] - 실전 event [1] - 이벤트 시작하기 [.NET/C#] - 실전 event [2] - 유저컨트롤에서 페이지로 이벤트로 값 전달 [.NET/C#] - 실전 event [3] - 취소 가능한 이벤트란 [.NET/C#] - 실전 event [4] - 취소 가능한 이벤트 만들기 [.NET/C#] - 실전 event [5] - 취소 가능한 버튼 서버컨트롤 만들기 [.NET/C#] - 실전 event [6] - 취소 가능한 버튼 서버컨트롤 활용 이벤트 관련 글 : [.NET/C#] - Reflection 을 통한 Event 제어 1,2 회 이벤트에 대해 잘 알아 보셨는지요. 이번 3회차 에서는 1,2회차에 비해 난이도가 월등히 높아지게 됩니다. 반드시 이벤트를 정복하.. 더보기
실전 event [2] - 유저컨트롤에서 페이지로 이벤트로 값 전달 실전 event 목차 [.NET/C#] - 실전 event [1] - 이벤트 시작하기 [.NET/C#] - 실전 event [2] - 유저컨트롤에서 페이지로 이벤트로 값 전달 [.NET/C#] - 실전 event [3] - 취소 가능한 이벤트란 [.NET/C#] - 실전 event [4] - 취소 가능한 이벤트 만들기 [.NET/C#] - 실전 event [5] - 취소 가능한 버튼 서버컨트롤 만들기 [.NET/C#] - 실전 event [6] - 취소 가능한 버튼 서버컨트롤 활용 이벤트 관련 글 : [.NET/C#] - Reflection 을 통한 Event 제어 우리는 전편에서 이벤트의 간략한 소개와 예제를 통해 이벤트의 사용 방법을 익혀보았습니다. 이번편 부터는 이벤트를 활용할 수 있는 예제들을 중.. 더보기
실전 event [1] - 이벤트 시작하기 실전 event 목차 [.NET/C#] - 실전 event [1] - 이벤트 시작하기 [.NET/C#] - 실전 event [2] - 유저컨트롤에서 페이지로 이벤트로 값 전달 [.NET/C#] - 실전 event [3] - 취소 가능한 이벤트란 [.NET/C#] - 실전 event [4] - 취소 가능한 이벤트 만들기 [.NET/C#] - 실전 event [5] - 취소 가능한 버튼 서버컨트롤 만들기 [.NET/C#] - 실전 event [6] - 취소 가능한 버튼 서버컨트롤 활용 이벤트 관련 글 : [.NET/C#] - Reflection 을 통한 Event 제어 이벤트란 무엇인가? 이벤트는 간단히 말하자면 특정 사건이 발생했음을 알리는데 사용됩니다. Page_Load 되었을때 Page_Load 이벤트.. 더보기
[C# 3.0] LINQ to Sql 의 쿼리를 로그로 남겨보자 이미 C# 3.0 에서 LINQ to Sql 란 말은 자주 들어 보았을 것이다. 많은 세미나 또는 블로그 포스트에서 LINQ to Sql 의 쿼리가 MSSQL 프로필러를 통해 실행되는 모습을 익히 보았을 것이다. 하지만 LINQ to Sql 을 이용하여 쿼리가 되는 것을 기록할 필요가 있다. 쿼리가 수행되는 시간, 쿼리 되는 빈도나 부하 등을 유지보수 하기 위해서 반드시 이 쿼리들이 로그에 기록되어야 한다. 그럼 오늘은 이 LINQ to Sql 이 어떻게 로그를 남기고 어떻게 로그에 기록하면 될지 알아보자. 먼저 콘솔 프로젝트를 만들어보자. 우선 LINQ to Sql 항목을 추가하고, [그림1] 과 같이 서버탐색기를 통해서 데이터베이스의 테이블을 끌어놓자. 여기서 사용하는 테이블은 UmcBlog 실제 웹.. 더보기
LINQ QUIZ LINQ QUIZ 간단한 퀴즈를 풀면서 LINQ 에 대한 지식을 테스트 합니다. 모든 샘플은 다음과 같은 네임스페이스가 선언되어 있습니다. using System; using System.Linq; using System.Data.Linq; using System.Xml.Linq; using System.Collections; 그리고 다음과 같은 배열이 선언되어 있습니다. string[] colors = { "green", "brown", "blue", "red" }; 자!! 그럼 이제 도전해 보십시오. Q1. 다음 표현의 결과는 무엇입니까? colors.Max (c => c.Length) (A) 5 (B) green (C) brown (D) Compile-time error (E) Exception t.. 더보기
LINQ To Sql 의 올바른 사용 LINQ TO Sql 은 데이터베이스를 엑세스 하고 쿼리하는데 데이터베이스와 어플케이션간에 많은 장벽을 없애버렸다. 바로 어플케이션에서 쉽게 SQL 쿼리를 사용할 수 있기 때문이다. 하지만, 이와 같이 장벽이 사라진 만큼 데이터베이스와 어플케이션의 더욱 더 깊은 이해가 요구 되어야 더욱 더 섬세하고 좋은 성능을 낼 수가 있을 것이다. 일반적인 데이터엑세스 과정 대략 위와 같은 논리적인(또는 물리적인) 3 Layer 형태가 갖추어 질 것이다.(위 그림 정말 못그렸다.;;) 그렇다면 LINQ TO Sql 의 사용은 Data Access Layer 가 가장 적절할 것 같다. LINQ TO Sql 클래스를 만들어, 비쥬얼하게 멋진 다이어그램과 사용할 프로시져를 끌어다 놓는 것 만으로 SqlParameter 를 .. 더보기
확장 메서드의 설계(Architect) 우리는 C# 3.0 에 확장 메서드(Extension Methods) 가 언어적으로 지원된다는 말은 수없이도 들어보았다. 확장 메서드는 기존 C# 2.0 에 비해 굉장히 파격적이다. 추후 확장 프로퍼티와 확장 이벤트 등도 지원된다고 하니, 가히 언어적으로 파격적이다. 확장 메서드의 문제점 확장 메서드는 굉장히 파격적이다. 내가 C# 2.0 을 하면서 감히 이런 언어적 지원이 가능하리라곤 상상도 못했으니 그 아이디어 적이 면만으로도 충분히 놀랄만 하다. 확장 메서드는 원본 타입의 Type 에 따라 지원된다. 하지만, 자주 사용되는 string, int, bool 등과 같은 타입에 확장 메서드를 추가하게 되고, 프레임웍이 커짐에 따라 이런 확장 메서드의 양도 무한대(?)로 커질 가능성이 충분히 있다. 확장 .. 더보기
람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [2] [.NET/C# 3.0] - 람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [1] [.NET/C# 3.0] - 람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [2] 지난 아티클에서 우리는 List 컬렉션에 특정 요소를 탐색하기 위해 delegate 와, 익명 메서드, 람다식을 이용한 방법을 알아보았다. List 컬렉션의 Find와 FindAll 메서드는 List 클래스가 제공하는 메서드지만, 이와 비슷한 확장 메서드를 손수 구현해 보도록 할 것이다. 이번에도 다음의 List 컬렉션의 데이터를 가지고 예제를 만들어 볼 것이다. List arr = new List(); arr.Add(1).. 더보기
람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [1] [.NET/C# 3.0] - 람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [1] [.NET/C# 3.0] - 람다식(Lambda Expressions) 을 이용한 확장 메서드(Extension Methods) 만들기 [2] C# 3.0 에서 LINQ 를 위해 많은 언어적 개념이 도입되었다. 확장 메서드(Extension Methods)와 Lambda Expression 등이 바로 그것이다. 그중 Lambda Expression(이하 람다식) 은 Ruby 에서 먼저 나왔다고 하지만, C# 3.0 에서의 람다식은 LINQ 와 확장 메서드와 굉장히 사슬처럼 엮여 있는 듯한 모습이다. 람다식은 대리자(Delegate)와 제네릭 메서드의 복잡한 식을 .. 더보기
LINQ 의 OUTER JOIN 작업 LINQ 를 이용한 OUTER JOIN 을 해보자. 이번 강좌를 지난 강좌에 이어 LINQ to SQL Classes 항목을 추가 하여야 한다. 이부분에 대해서는 다음의 URL 을 참고하기 바란다. [.NET/C# 3.0] - LINQ to SQL Classes 와 LINQ의 JOIN 작업 http://umc.pe.kr/article/2007/09/02/LINQ-to-SQL-Classes-AND-LINQ-JOIN.aspx 우선 우리가 원하는 SQL 쿼리식을 보자 SELECT A.ArticleNo, C.Content, C.InsertDate FROM Article A LEFT OUTER JOIN Comment C ON C.ArticleNo = A.ArticleNo ORDER BY C.InsertDate D.. 더보기
LINQ to SQL Classes 와 LINQ의 JOIN 작업 LINQ 의 JOIN 기존 C# 2.0 의 Typed DataSet 의 개념과 LINQ 가 결합하여 LINQ to SQL Classes 라는 이름으로 굉장히 강력한 기능을 제공한다. LINQ, 람다식, 익명 형식에 대한 내용은 다음의 URL 을 참고 하세요. 2009-06-20 아래의 경로로 접속할 수 없습니다. LINQ의 발전과 C# 설계에 미치는 영향 http://umc.pe.kr/article/2007/09/02/Future-LINQ.aspx LINQ to SQL Classes 항목 만들기 [새 항목 만들기] 에서 LINQ to SQL Classes 를 만든다. 그럼 .dbml 확장자를 가진 몇가지 파일과 디자이너 화면이 나타나게 된다. 여기서 사용하게 될 데이터베이스는 UmcBlog 소스와 함께 .. 더보기
XDocument 클래스와 LINQ XDocument 클래스 Framework 3.0 에 들어서면서 새로이 등장한 클래스이다. 그 이전 Framework 1.1, 2.0 에서 XML 작성을 해보았다면, 그 노가다와 다름없는 코딩을 해보았을 것이다. XmlDocument 또는 XmlTextWriter, XmlTextReader 클래스 사용하여 편리하게 XML 작업을 했다. XmlDocument 는 DOM 과 같은 형태로 작업이 가능하며, 빠른 탐색이 장점이다. XmlTextWriter 와 XmlTextReader 는 Inline 작업이 가능하며, 간결한 사용법이 장점이었다. 기존 XmlTextWriter 로 XML 만드는 일반적인으로 작업하는 예 하지만, 오늘 XDocument 클래스를 알게된다면, 위 두 클래스를 쳐다도 안보게 될 상황이 .. 더보기
확장 메서드( Extension Method ) 확장 메서드(Extension Method) 이름만 들어보아도 뭔가 심오한 분위기가 물씬 풍긴다. 쉽게 말하자만, 기존의 클래스를 확장한다고 해야할까? 만약, 클래스의 메서드를 확장하기 위해선 상속을 하고, 상속한 클래스에서 메서드를 선언하여 확장하는 방식이었다. 하지만 Framework 3.0 에서는 더 이상 메서드의 확장을 위해 클래스의 상속이 필요가 없다. 시작하기 심플한 샘플부터 보도록 하자. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleTest1 { class Program { static void Main(string[] args) { string url .. 더보기
SoundPlayer 클래스로 WAVE 파일 재생 윈도우 표준 사운드 파일 형식으로 WAVE 가 있다. .wav 형식의 확장자를 사용하며, 시스템이 사용하는 WAVE 파일은 C:\Windows\Media 폴더에 보면 있다. 이러한 .wav 파일을 재생하는 방법이 .NET Framework 2.0 에 추가되었다. SoundPlayer 라는 클래스를 사용하고, 이 클래스를 이용하여 사운드를 재생하는 방법을 소개한다. 동기적으로 .wav 파일 재생하기 동기적으로 .wav 파일을 재생하려면, SoundPlayer 의 PlaySync 메서드를 호출하면 된다. 생성자에 .wav 파일의 경로를 적어주는 것으로 객체를 생성하면 된다. 다음은 PlsySync 를 이용한 .wav 파일 재생 샘플이다. using System; using System.Collections... 더보기
[제네릭 4편] 제약이 붙은 제네릭 클래스 제약이 붙은 제네릭 클래스 어떠한 형태로도 받아 들이는 제네릭은 강력하다. 이러한 제네릭의 는 대부분의 클래스가 될 수 있다. 그 강력함을 제약해 사용하기 쉽게 하는 수단이 있다. 구체적으로는, 형 파라메터에 제약 리스트를 붙일 수 있다는 것이다. 제약 리스트에는, 클래스나 인터페이스, 생성자의 제약을 지정할 수 있다. 이용 빈도는 낮다고 생각되기 때문에 자세한 설명을 하지 않는다. 아래의 샘플을 보자. 리스트12는 인터페이스 제약, 생성자 제약을 붙였다. using System; // IDisposable 인터페이스를실장한다Sample 클래스 public class Sample : IDisposable { public void Dispose() { Console.WriteLine("Disposed");.. 더보기