[include(틀:링크시 주의,text=\[\[C#]]대신 \[\[C#]]으로 입력해야합니다.)] 2002년 Microsoft에서 제작한 프로그래밍 언어로 2017년 C# 7.0에서 부분오픈소스화, 2020년 C# 9.0부터 완전한 오픈소스가 된 프로그래밍 언어이다. ==예제== 모든 예제는 C# 10.0을 기준으로 작성하였다. ===Hello, world!=== {{{#!syntax csharp Console.WriteLine("Hello, world!"); }}} ===반복문=== {{{#!syntax csharp using static System.Linq.Enumerable; Range(1, 10).ToList().ForEach(Console.WriteLine); }}} 이 코드는 1부터 10까지를 줄바꿈을 기준으로 출력한다. 공백을 기준으로 하기 위해선 {{{#!syntax csharp using static System.Linq.Enumerable; Console.WriteLine(string.Join(' ', Range(1, 10))); }}} 을 사용하자. ==장점== ===실행속도=== C#은 CLR이라는 VM을 통하여 실행된다. 이는 JAVA의 JVM에 대응하는 기능으로 상당한 성능 감소의 원인이 된다. 그러나, C#은 C++를 대체하는것을 목표로 하는 Golang와 실행속도가 유사하다. 그러면서 최신 문법들을 전적으로 활용한다면 Python의 2배정도의 코드양으로 동일한 동작을 하도록 할 수 있다.--함수 이름이 정말 길다...-- ===Cross platform=== C#은 하나의 dll파일을 Native library의 의존성이 없다면 모든 운영체제에서 동일한 작동을 보장하는 크로스 플렛폼 언어이다. --물론 이 Native library를 엄청나게 많이 활용한다는 것이 문제지-- --Windows API를 쓰면서 크로스 플렛폼을 바라는건 선넘지...[* GTK#을 쓰자]-- ===[[C++]]과의 통합=== C++코드를 매우 간편하게 실행시킬 수 있다.[* 2줄로 Shared object의 코드를 불러올 수 있다.] 이것을 남발하면 다른 OS로의 포팅이 어려워질수도 있다. --C++의 문제지 C#의 문제는 아니다.-- Program.cs {{{#!syntax csharp Hello(); [DllImport("mynative.so")] public static extern void Hello(); }}} header.hpp {{{#!syntax cpp extern "C" { void Hello(); } }}} source.cpp {{{#!syntax cpp void Hello() { printf("Hello, world!"); } }}} 이런식으로 코딩하면 Hello, world!를 출력시킬 수 있다. ===강타입이면서 약타입=== --C# 절망편-- {{{#!syntax csharp dynamic a = 10; Console.WriteLine(a); a = "Hello, world!"; Console.WriteLine(a); a = Linq.Enumerable.Range(1, 10); foreach(var x in a) Console.WriteLine(x); }}} 정상적으로 컴파일 되고 실행된다.--아무도 안쓴다-- ==오해와 진실== ===비 Windows OS에서의 동작=== C# 6.0까지는 Microsoft에서 지원한 Mono runtime을 통하여 비공식적으로 지원하였으나, C# 7.0 이후로는 Windows가 아닌 운영체제를 공식적으로 지원하고 있다. 현재 미지원하는 기능은 전부 Windows API에 의존적으로 작동하는 기능들이다. ==흥미로운 내용들== ===Iteration중 해당 list를 수정하는 법=== {{{#!syntax csharp var list = new List<long>(); list.Add(1); list.Add(2); list.ForEach(x => { Console.WriteLine(x); if (x != 1) return; list.Add(3); list.Add(4); for (long a = 0; a < (long)int.MaxValue / 2; a++) { list.Add(1); list.Add(2); list.RemoveAt(5); list.RemoveAt(4); } list.Add(5); list.Add(6); }); }}} 정확하게 리스트에 2^32번의 변경을 진행하면 InvalidOperationException이 나오지 않는다. --이걸 해결하는 PR을 보냈지만, List<T>의 코드가 처음으로 만들어진 년도가 2002년이라... Reject되었다고 한다. 망할 System.Private.CoreLib...-- [[분류:프로그래밍 언어]]