C Sharp(프로그래밍 언어)

C Sharp (programming language)
C#
C Sharp wordmark.svg
패러다임다중 패러다임: 구조화, 필수, 객체 지향, 이벤트 지향, 태스크 지향, 기능, 범용, 반사, 동시
가족C
설계자Anders Hejlsberg (Microsoft)
개발자Mads Torgersen (Microsoft)
처음 등장한2000년, 22년(2000년)[1]
안정된 릴리스
2021년 11월 8일 / 10[2].0, 8개월 (2021년 11월 8일)
프리뷰 릴리즈
2022년[3] 2월 11일 / 22일; 5개월 전 (2022년 2월 22일)
타이핑 분야정적, 동적,[4] 강력, 안전, 주격, 부분 추론
플랫폼공통 언어 인프라스트럭처
면허증.
파일 이름 확장자.cs,.csx
웹 사이트docs.microsoft.com/en-us/dotnet/csharp/
주요 구현
Visual C#, .NET,NET Framework (단종), Mono, DotGNU (단종), 유니버설 Windows 플랫폼
사투리
C†, 폴리폰 C#, 확장 C#
영향을 받다
C++,[7] C†, Eiffel, F#,[a] Haskell, Icon, J#, J++,[7] Java, ML, Modula-3, [8]Object Pascal, VB
영향받은
채플,[9] Clojure,[10] [11]Crystal, D, J#, [12]Dart, F#, Hack, Java,[13][14] Kotlin, Nemerle, Oxygene, Rust, [15]Swift, Vala, TypeScript

C#(/si "rp/ [b]see sharp )은 범용 멀티패러다임 프로그래밍 언어입니다.C#에는 정적 타이핑, 강력한 타이핑, 어휘 범위, 필수, 선언, 기능,[16] 범용, 객체 지향(클래스 기반) 및 컴포넌트 지향 프로그래밍 규칙이 포함됩니다.

C# 프로그래밍 언어는 2000년 Microsoft의 Anders Hejlsberg에 의해 설계되었으며, 이후 2002년 Ecma(ECMA-334), 2003년 ISO/IEC(ISO/IEC 23270)에 의해 국제 표준으로 승인되었습니다.Microsoft 에서는, C# 를 와 함께 도입했습니다.NET Framework와 Visual Studio는 모두 비공개 소스였습니다.그 당시 마이크로소프트는 오픈 소스 제품을 가지고 있지 않았다.4년 후인 2004년, C# 프로그래밍 언어에 크로스 플랫폼 컴파일러와 런타임 환경을 제공하는 Mono라는 무료 오픈 소스 프로젝트가 시작되었습니다.10년 후, Microsoft는 Visual Studio Code(코드 에디터), Roslyn(컴파일러), 및 Unified를 발표했습니다.NET 플랫폼(소프트웨어 프레임워크)은 모두 C#을 지원하며 무료, 오픈 소스 및 크로스 플랫폼입니다.또한 Mono는 Microsoft에 입사했지만 에 합병되지 않았습니다.그물.

2022년 7월 현재 언어의 가장 안정적인 버전은 C# 10.0으로 2021년에 에 출시되었습니다.NET 6.0.[17][18]

설계 목표

Ecma 표준에는 C#[16]의 설계 목표가 기재되어 있습니다.

  • 이 언어는 단순하고 현대적인 범용 객체 지향 프로그래밍 언어입니다.
  • 언어 및 그 구현은 강력한 유형 검사, 배열 경계 검사, 초기화되지 않은 변수 사용 시도 감지 및 자동 가비지 수집과 같은 소프트웨어 엔지니어링 원칙을 지원해야 합니다.소프트웨어의 견고성, 내구성, 프로그래머의 생산성이 중요합니다.
  • 이 언어는 분산 환경에서의 전개에 적합한 소프트웨어 컴포넌트 개발에 사용하기 위한 것입니다.
  • 이식성소스 코드와 프로그래머, 특히 C와 C++에 이미 익숙한 사용자에게 매우 중요합니다.
  • 국제화에 대한 지원은 매우 중요하다.
  • C#은, 고도의 operating system을 사용하는 대규모 시스템으로부터 전용의 기능을 가지는 소규모 시스템에 이르기까지, 호스트 시스템과 임베디드 시스템의 양쪽 모두의 애플리케이션에 최적입니다.
  • C# 어플리케이션은 메모리와 처리 능력 요건에 관해 경제성을 목적으로 하고 있습니다만, 이 언어는 C [19]또는 어셈블리 언어와 퍼포먼스 및 크기 면에서 직접 경쟁하는 것은 아닙니다.

역사

개발 중.NET Framework 클래스 라이브러리는 원래 SMC([20][21]Simple Managed C)라고 불리는 관리 코드 컴파일러 시스템을 사용하여 작성되었습니다.1999년 1월 앤더스 헤일스버그는 "C-like Object Oriented Language"[22]의 약자인 쿨이라는 새로운 언어를 만들기 위한 팀을 만들었다.마이크로소프트는 이 언어의 최종 명칭으로 "Cool"이라는 이름을 유지하는 것을 고려했지만 상표권을 이유로 그렇게 하지 않기로 결정했다.그때까지.NET 프로젝트는 2000년 7월 Professional Developers Conference에서 공개적으로 발표되었으며, 언어는 C#으로 이름이 변경되었으며 클래스 라이브러리와 ASP도 마찬가지입니다.NET 런타임은 C#으로 포팅되었습니다.

Hejlsberg는 C#의 수석 디자이너이자 Microsoft의 리드 아키텍트이며, 이전에는 Turbo Pascal, Embabcadero Delphi(구 CodeGear Delphi, In Enterprise Delphi 및 Borland Delphi), Visual J++설계에 관여했습니다.인터뷰 및 기술 문서에서 그는 대부분의 주요 프로그래밍 언어(C++, Java, Delphi, Smalltalk 등)의 결함이 공통 언어 런타임(CLR)의 기본을 주도했고, 이는 다시 C# 언어 자체의 설계를 주도했다고 말했습니다[23].

제임스 고슬링 1994년에는 자바 프로그래밍 언어를 만들고 빌 조이, 선마이크로 시스템즈, 자바의 창안자의 공동 창업자인#자바의"모방";고슬링은 "자바의 안정성, 생산성과 보안을[C#은]종류 삭제된다고 말했다 C라고 불렀다."[24][25]클라우스 Kreft과 Angelika 랑게르(C++스트림 예약하실 경우 작가)a에 명시된"Java와 C#은 거의 동일한 프로그래밍 언어입니다.혁신이 [26]결여된 지루한 반복, "Java 또는 C#이 프로그램 작성 방식을 바꾼 혁신적인 프로그래밍 언어라고 주장할 사람은 거의 없을 것입니다.", "C#은 Java에서 많은 것을 차용했습니다.", 그리고 그 반대도 마찬가지입니다.C#에서 박스와 언박싱을 지원하므로 Java에서도 [27]비슷한 기능을 사용할 수 있습니다."2000년 7월 Hejlsberg는 C#이 "Java 클론이 아니며"[28] 설계에 있어서 "C++에 훨씬 더 가깝다"고 말했다.

2005년 11월에 C# 2.0이 출시된 이후 C#과 Java 언어는 점점 더 다른 궤도로 발전하여 완전히 다른 두 개의 언어가 되었습니다.첫 번째 주요 출발 중 하나는 두 언어에 제네릭이 추가되어 구현이 크게 달라졌습니다.C#은 다른 클래스와 마찬가지로 사용할 수 있는 "퍼스트 클래스" 범용 객체를 제공하기 위해 리플리케이션을 사용합니다.클래스 로드 [29]시 코드 생성을 수행합니다.또한 C#은 함수형 프로그래밍에 대응하기 위해 몇 가지 주요 기능을 추가하였으며, C# 3.0과 함께 출시된 LINQ 확장과 람다 표현식, 확장 메서드 및 익명 [30]유형을 지원하는 프레임워크가 정점에 달했습니다.이러한 기능을 통해 C# 프로그래머는 응용 프로그램에 유리할 때 폐쇄 등의 기능적 프로그래밍 기술을 사용할 수 있습니다.LINQ 확장과 함수 Import를 통해 개발자는 데이터베이스 쿼리, xml 파일 구문 분석 또는 데이터 구조 검색과 같은 일반적인 작업에 포함되는 보일러 플레이트 코드의 양을 줄일 수 있습니다.이것에 의해, 실제의 프로그램 로직이 강조되어 가독성과 [31]유지보수성이 향상됩니다.

C#는 Andy라고 불리는 마스코트를 가지고 있었다.2004년 [32]1월 29일에 퇴역했습니다.

C#은 원래 ISO/IEC JTC 1 [34]소위원회 SC 22[33]ISO/IEC 23270:2003에 따라 검토를 위해 제출되었으나 철회되고 ISO/IEC 23270:[35]2006에 따라 승인되었다.23270:2006은 23270:2018에 따라 철회되었으며 이 [36]버전에서 승인되었습니다.

이름.

마이크로소프트는 증분 [37]컴파일을 위해 설계된 C 언어의 변형에 1988년에 C#이라는 이름을 처음 사용했습니다.그 프로젝트는 완성되지 않았지만 이름은 남아 있다.

"C 샤프"라는 이름은 날카로운 기호는 쓰여진 음을 [38]반음 높여야 한다는 것을 나타내는 악보에서 영감을 얻었다.이것은 C++언어 이름과 유사합니다.여기서 "+"는 변수를 평가한 후 1씩 증가시켜야 함을 나타냅니다.또한 샤프 기호는 4개의 "+" 기호의 묶음(2x2 그리드)과 유사하며, 이는 언어가 C++[39]의 증가임을 더욱 암시한다.

디스플레이(표준 글꼴, 브라우저 등)의 기술적인 한계 그 날카로운 상징(.mw-parser-output{font-family:monospace,monospace}U+266F♯ 공중 요격시 전파 방해 SHARP 더하기 기호(& 날카로운 .monospaced.))대부분의 키보드 레이아웃에 있기 때문에, 수를 표시(U+0023# 제1 더하기 기호(&num.))의 급격한 상징과 가까워지려고 선정되었다. 프로그래밍 언어의 서면 이름입니다.[40]이 표기법은 ECMA-334 C# 언어 [16]사양에 반영되어 있습니다.

"sharp" 서픽스는 다른 많은 에서 사용되고 있습니다.J#(a)을 포함한 기존 언어의 배리언트인 NET 언어.Java 1.1, A#(Ada에서) 및 기능 프로그래밍 언어 F#[41]에서 파생된 Microsoft에 의해 설계된 NET 언어.대한 Eiffel의 원래 구현입니다.NET은 에펠 [42]번호라고 불렸습니다. 이름은 현재 완전한 에펠 언어가 지원되고 있기 때문에 폐지되었습니다.서픽스는 Gtk#(a)와 같은 라이브러리에도 사용되고 있습니다.GTK 및 기타 GNOME 라이브러리용 NET 포장지 및 코코아 번호(코코아 포장지).

버전

버전 언어 사양 날짜. .그물 비주얼 스튜디오
에코마 ISO/IEC 마이크로소프트
C# 1.0 2002년 12월 2003년 4월 2002년 1월 2002년 1월 .NET Framework 1.0 Visual Studio.NET 2002
C# 1.1
C# 1.2
2003년 10월 2003년 4월 Visual Studio.NET 2003
C# 2.0[43] 2006년 6월 2006년 9월 2005년 9월[c] 2005년 11월 Visual Studio 2005
Visual Studio 2008
C# 3.0[44] 없음. 2007년 8월 2007년 11월
Visual Studio 2008
C# 4.0[46] 2010년 4월 2010년 4월 Visual Studio 2010
C# 5.0[47] 2017년 12월 2018년 12월 2013년 6월 2012년 8월 Visual Studio
Visual Studio 2013
C# 6.0[48] 없음. 초안 2015년 7월
Visual Studio 2015
C# 7.0[49][50] 사양서 제안서 2017년 3월 Visual Studio 2017 버전 15.0
C# 7.1[51] 사양서 제안서 2017년 8월
  • .NET Core 2.0
Visual Studio 2017 버전[52] 15.3
C# 7.2[53] 사양서 제안서 2017년 11월 Visual Studio 2017 버전[54] 15.5
C# 7.3[55] 사양서 제안서 2018년 5월
Visual Studio 2017 버전[54] 15.7
C# 8.0[56] 사양서 제안서 2019년 9월
  • .NET Core 3.0
  • .NET Core 3.1
Visual Studio 2019 버전[57] 16.3
C# 9.0[58] 사양서 제안서 2020년 11월
  • .NET 5.0
Visual Studio 2019 버전[57] 16.8
C# 10.0[59] 사양서 제안서 2021년 11월
  • .NET 6.0
  • .NET 6.0.1
Visual Studio 2022 버전[60] 17.0

구문

C# 언어의 핵심 구문은 C, C++, Java 등의 다른 C 스타일 언어와 유사합니다.특히 다음과 같습니다.

  • 세미콜론은 문의 끝을 나타내기 위해 사용됩니다.
  • 괄호는 문을 그룹화할 때 사용합니다.문은 일반적으로 메서드(함수), 메서드는 클래스로, 클래스는 네임스페이스로 그룹화됩니다.
  • 변수는 등호를 사용하여 할당되지만 두 개의 연속 등호를 사용하여 비교됩니다.
  • 괄호는 어레이를 선언하기 위해, 그리고 그 중 하나의 지정된 인덱스로 값을 얻기 위해 어레이와 함께 사용됩니다.

특징의 구별

C#을 C, C++ 및 Java와 구별하는 C#의 주요 기능은 다음과 같습니다.

휴대성

설계상 C#은 기반이 되는 Common Language Infrastructure([61]CLI; 공통 언어 인프라스트럭처)를 가장 직접적으로 반영하는 프로그래밍 언어입니다.대부분의 고유 유형은 CLI 프레임워크에 의해 구현된 값 유형에 해당합니다.단, 언어 사양에는 컴파일러의 코드 생성 요건이 기재되어 있지 않습니다.즉, C# 컴파일러가 Common Language Runtime을 타겟으로 하거나 Common Intermediate Language(CIL; 공통 중간 언어)를 생성하거나 기타 특정 형식을 생성해야 한다고 기술되어 있지 않습니다.이론적으로 C# 컴파일러는 기존의 C++ 또는 Fortran 컴파일러와 같은 머신 코드를 생성할 수 있습니다.

타자 치기

C#은 키워드를 사용하여 암묵적으로 입력된 강력한 변수 선언을 지원합니다.var및 키워드를 지정하여 암묵적으로 입력된 배열new[]그 뒤에 수집 이니셜라이저가 이어집니다.

C#은 엄밀한 부울 데이터 유형을 지원합니다.bool. 다음과 같은 조건을 수반하는 진술while그리고.if, 를 실장하는 타입의 표현식이 필요합니다.true연산자(부울형 등)를 지정합니다.C++는 부울 타입도 있지만, 정수와 다음과 같은 식으로 자유롭게 변환할 수 있습니다.if (a)그것만 요구하다aBool로 변환할 수 있습니다.aint, 또는 포인터가 될 수 있습니다.C#는 프로그래머가 정확하게 반환되는 표현을 사용하도록 강요한다는 이유로 이 "참 또는 거짓을 의미하는 정수" 접근방식을 허용하지 않습니다.bool다음과 같은 특정 유형의 프로그래밍 오류를 방지할 수 있습니다.if (a = b)(양도의 사용)=평등 대신==).

C#은 C++보다 안전한 타입입니다.기본적으로는 정수의 확대 등 안전한 것으로 간주되는 유일한 암묵적 변환입니다.이는 컴파일 시, JIT 중, 경우에 따라서는 런타임에 적용됩니다.Boulans와 정수 사이 또는 열거 멤버와 정수 사이(임의의 열거형 유형으로 암묵적으로 변환할 수 있는 리터럴0 제외)는 암묵적으로 변환되지 않습니다.사용자 정의 변환은 모두 기본적으로 암묵적인 C++ 복사 컨스트럭터 및 변환 연산자와 달리 명시적 또는 암묵적으로 명시적으로 마킹해야 합니다.

C#은 단순히 가상 메서드에서 반환 유형의 의미론을 통해 위반을 어느 정도 지원하는 C++와는 달리 일반 유형에서 공분산위반을 명시적으로 지원합니다.

열거 멤버는 자체 범위 내에 배치됩니다.

C# 언어에서는 글로벌 변수 또는 함수를 사용할 수 없습니다.모든 메서드와 멤버는 클래스 내에서 선언해야 합니다.퍼블릭 클래스의 스태틱멤버는 글로벌 변수 및 함수를 대체할 수 있습니다.

로컬 변수는 C 및 C++와 달리 둘러싸인 블록의 변수를 음영으로 표시할 수 없습니다.

메타프로그래밍

메타프로그래밍은 여러 가지 방법으로 실행할 수 있습니다.

  • 리플렉션은 를 통해 지원됩니다.NET API: 유형 메타데이터 검사 및 동적 메서드 호출 등의 시나리오를 활성화합니다.
  • [62] 트리는 코드를 추상 구문 트리로 나타냅니다.여기서 각 노드는 검사 또는 실행할 수 있는 식입니다.이것에 의해, 실행시에 실행 가능한 코드를 동적으로 변경할 수 있습니다.표현 트리는 언어에 약간의 호모콘성을 도입한다.
  • 속성은 유형, 구성원 또는 전체 어셈블리에 연결할 수 있는 메타데이터로, Java의 주석과 동일합니다.속성은 컴파일러와 리플렉션을 통해 코드화할 수 있습니다.이러한 속성의 대부분은 GCC 및 VisualC++의 플랫폼에 의존하는 프리프로세서 [citation needed]디렉티브의 기능을 복제합니다.
  • .NET 컴파일러 플랫폼(Roslyn)은 언어 컴파일 서비스에 대한 API 접근을 제공하며 내부에서 C# 코드를 컴파일할 수 있습니다.NET 어플리케이션코드 구문 분석, 의미 분석, CIL 동적 컴파일 및 코드 [63]방출을 위한 API를 공개합니다.
  • Roslyn C# 컴파일러의 기능인 소스 [64]생성기는 컴파일 시간 메타프로그래밍을 활성화합니다.컴파일 프로세스 중에 개발자는 컴파일러의 API를 사용하여 컴파일되는 코드를 검사하고 추가로 생성된 C# 소스 코드를 전달하여 컴파일할 수 있습니다.

방법 및 기능

C#의 메서드는 클래스 속성의 단순한 값 보유 기능이 아닌 함수(명령어 시퀀스)로 호출할 수 있는 클래스의 멤버입니다.C++ 나 ANSI C 등 구문적으로 유사한 다른 언어에서와 마찬가지로 메서드의 시그니처는 임의의 옵션접근성 키워드(예:private반환 타입의 명시적인 사양(예:int또는 키워드void값이 반환되지 않는 경우) 메서드의 이름, 그리고 마지막으로 쉼표로 구분된 파라미터 사양의 괄호 안의 시퀀스로, 각 파라미터의 유형, 형식 이름 및 옵션으로 파라미터가 제공되지 않을 때마다 사용되는 기본값으로 구성됩니다.단순히 반환값 또는 할당에 의해 클래스 속성을 가져오거나 설정하는 것과 같은 특정 종류의 메서드에는 완전한 서명이 필요하지 않지만 일반적으로 클래스의 정의에는 메서드의 완전한 서명 선언이 포함됩니다.

C++와 마찬가지로 Java와 달리 C# 프로그래머는 scope modifier 키워드를 사용해야 합니다.virtual메서드를 [65]서브클래스에 의해 덮어쓸 수 있도록 합니다.

C#의 확장 메서드는 프로그래머가 클래스의 메서드 테이블의 메서드인 것처럼 정적 메서드를 사용할 수 있도록 하며, 프로그래머는 오브젝트와 그 파생 모델에 존재해야 한다고 느끼는 오브젝트에 메서드를 추가할 수 있도록 합니다.

종류dynamic는 런타임 메서드바인딩을 가능하게 하여 JavaScript와 같은 메서드콜 및 런타임오브젝트 구성을 가능하게 합니다.

C#은 키워드를 사용한 강력한 타입의 함수 포인터를 지원합니다.delegateQt 프레임워크의 의사 C++ 신호슬롯과 마찬가지로 C#에는 퍼블리시-서브스크라이브 스타일의 이벤트를 둘러싼 시멘틱스가 있습니다.단, C#에는 위임자가 사용됩니다.

C#은 Java와 같은 기능을 제공합니다.synchronized메서드 콜, Atribut 경유[MethodImpl(MethodImplOptions.Synchronized)]및 키워드를 사용하여 상호 연결된 잠금을 지원합니다.lock.

소유물

C#은 속성을 가진 클래스를 지원합니다.속성은 backing 필드가 있는 단순한 접근자 함수이거나 getter 및 setter 함수를 구현할 수 있습니다.

C# 3.0 이후로는 자동 실장 속성의 구문설탕을 사용할 [66]수 있습니다.이것에 의해, 액세스 장치(getter)와 뮤테이터(setter)는, 클래스의 1개의 어트리뷰트로 조작을 캡슐화할 수 있습니다.

네임스페이스

A C#namespaceJava와 동일한 수준의 코드 분리 기능을 제공합니다.package또는 C++namespace와 매우 유사한 규칙과 기능을 가진package. 네임스페이스는 "using" [67]구문을 사용하여 Import할 수 있습니다.

메모리 액세스

C#에서 메모리 주소 포인터는 안전하지 [68]않은 으로 특별히 표시된 블록 내에서만 사용할 수 있으며 안전하지 않은 코드를 가진 프로그램을 실행하려면 적절한 권한이 필요합니다.대부분의 오브젝트 액세스는 안전한 오브젝트 참조를 통해 이루어집니다.이러한 참조는 항상 "라이브" 오브젝트를 가리키거나 잘 정의된 늘 값을 가지고 있습니다.데드 오브젝트(가비지가 수집되어 있는 오브젝트) 또는 메모리의 랜덤블록에 대한 참조를 취득하는 것은 불가능합니다.안전하지 않은 포인터는 가비지 수집 개체, 어레이, 문자열 또는 스택 할당 메모리 블록에 대한 참조가 없는 '관리되지 않음' 값 유형의 인스턴스를 가리킬 수 있습니다.안전하지 않은 것으로 표시되지 않은 코드는 여전히 포인터를 저장 및 조작할 수 있습니다.System.IntPtr입력은 할 수 있지만 참조를 해제할 수는 없습니다.

관리 대상 메모리는 명시적으로 해방할 수 없습니다.대신 가비지가 수집됩니다.가비지 컬렉션은 대부분의 경우 더 이상 필요하지 않은 메모리를 해방하는 프로그래머의 책임을 덜어줌으로써 메모리 누수 문제에 대처합니다.개체에 대한 참조를 필요 이상으로 오래 유지하는 코드에서도 메모리 사용량이 필요할 수 있지만 개체에 대한 최종 참조가 해제되면 메모리를 가비지 수집에 사용할 수 있습니다.

예외.

프로그래머는 다양한 표준 예외를 사용할 수 있습니다.표준 라이브러리의 메서드는 일부 상황에서 시스템 예외를 정기적으로 발생시키며 일반적으로 발생하는 예외의 범위가 문서화됩니다.클래스용으로 커스텀 예외 클래스를 정의하면 필요에 [69]따라 특정 상황에서 특정 처리를 수행할 수 있습니다.

체크된 예외는 C#에 없습니다(Java와는 대조적으로).이것은 scalability와 [70]versionability의 문제에 근거한 의식적인 결정이었습니다.

다형성

C++달리, C# 는 복수의 상속을 서포트하고 있지 않습니다만, 클래스는 임의의 수의 「인터페이스」(완전 추상 클래스)를 실장할 수 있습니다.이는 복잡함을 방지하고 CLI 전체에서 아키텍처 요건을 단순화하기 위한 언어 책임자의 설계 결정이었습니다.

같은 이름의 메서드를 포함한 여러 인터페이스를 실장하고 Java와 마찬가지로 같은 순서(, 같은 시그니처)로 같은 타입의 파라미터를 취득하는 경우 C#에서는 단일 메서드로 모든 인터페이스를 커버하고 필요에 따라 각 인터페이스에 대해 특정 메서드를 커버할 수 있습니다.

단, Java와 달리 C#은 연산자 [71]오버로드를 지원합니다.

언어 통합 쿼리(LINQ)

C#에는 를 통해 LINQ를 이용할 수 있습니다.NET 프레임워크개발자는 다음과 같은 경우 다양한 데이터 소스를 조회할 수 있습니다.IEnumerable<T>interface가 오브젝트에 구현됩니다.여기에는 XML 문서, ADO가 포함됩니다.NET 데이터 세트 및 SQL 데이터베이스.[72]

C#에서 LINQ를 사용하면 Intellisense 지원, 강력한 필터링 기능, 컴파일 오류 체크 기능을 갖춘 유형 안전성, 다양한 [73]소스에서 데이터를 쿼리할 수 있는 일관성 등의 이점이 있습니다.C# 및 LINQ에서 사용할 수 있는 여러 가지 언어 구조가 있습니다. 쿼리 표현식, 람다 표현식, 익명 유형, 암묵적으로 유형화된 변수, 확장 메서드 및 개체 이니셜라이저입니다.[74]

기능 프로그래밍

주로 필수 언어이지만, C# 2.0은 익명[75]대표자 형태로 퍼스트 클래스 기능과 폐쇄를 통해 기능 프로그래밍을 제한적으로 지원했습니다.C# 3.0은 람다 [75]표현식의 경량 구문, 확장 메서드(모듈의 어피던스) 및 "쿼리 이해" 언어 형식의 목록 이해 구문을 도입하여 기능 프로그래밍 지원을 확장했습니다.C# 7.0에는 튜플, 로컬 함수 및 패턴 [76]매칭과 같은 기능적 언어에서 일반적으로 볼 수 있는 기능이 추가되었습니다.C# 9.0에서는 주로 불변의 데이터 모델을 보다 효과적으로 지원하기 위해 구축된 레코드[77] 기능이 도입되었습니다.

공통형 시스템

C#에는 통합형 시스템이 있습니다.이 통합형 시스템은 Common Type System(CTS;[78] 공통형 시스템)이라고 불립니다.

통합형 시스템은 정수 등의 원형을 포함한 모든 유형이 다음 서브클래스의 하위 클래스임을 의미합니다.System.Object예를 들어, 모든 타입은 class를 상속합니다.ToString()방법.

데이터 유형의 카테고리

CTS는 데이터 유형을 다음 2개의 [78]카테고리로 나눕니다.

  1. 참조 유형
  2. 값 유형

값 유형의 인스턴스에는 참조 ID도 참조 비교 의미론도 없습니다.값 유형에 대한 등식 및 부등식 비교는 해당 연산자가 오버로드되지 않는 한 인스턴스 내의 실제 데이터 값을 비교합니다.값 유형은 다음에서 파생됩니다.System.ValueType는 항상 기본값이 있으며 언제든지 작성 및 복사할 수 있습니다.값 유형에 대한 다른 제한 사항으로는 서로 파생할 수 없으며(단, 인터페이스를 구현할 수 있음), 명시적인 기본(파라미터리스) 컨스트럭터를 가질 수 없다는 점이 있습니다.값 유형의 예는 다음과 같은 모든 원시 유형입니다.int(서명된 32비트 정수),float(32비트 IEEE 부동 소수점 번호),char(16비트 Unicode 코드 단위),System.DateTime(나노초 정밀도로 특정 시점을 식별합니다).기타 예는 다음과 같습니다.enum(열기) 및struct(사용자 정의 구조).

이와는 대조적으로, 참조 유형은 참조 동일성의 개념을 가지고 있다. 즉, 참조 유형의 각 인스턴스는 두 인스턴스 내의 데이터가 동일하더라도 본질적으로 다른 모든 인스턴스와 구별된다.이는 해당 연산자가 과부하되지 않는 한 구조적 평등보다는 참조적 평등을 테스트하는 기준 유형에 대한 기본 평등 및 불평등 비교에 반영된다(예:System.String참조 유형의 인스턴스 작성, 기존 인스턴스 복사 또는 두 기존 인스턴스의 값 비교 수행 등 일부 작업이 항상 가능한 것은 아닙니다.특정 참조 유형은 퍼블릭컨스트럭터를 공개하거나 대응하는 인터페이스를 구현함으로써 이러한 서비스를 제공할 수 있습니다(예:ICloneable또는IComparable참조 타입의 예는 다음과 같습니다.object(기타 모든 C# 클래스의 궁극적인 베이스 클래스),System.String(Unicode 문자 문자열) 및System.Array(모든 C# 어레이의 베이스 클래스).

두 유형 범주 모두 사용자 정의 유형을 사용하여 확장할 수 있습니다.

복싱과 언박싱

박스는 값 유형의 객체를 대응하는 참조 [78]유형의 값으로 변환하는 작업입니다.C#에서의 복싱은 암묵적입니다.

언박스는 참조 유형(이전에는 박스화)의 값을 값 [78]유형의 값으로 변환하는 작업입니다.C#에서 상자를 해제하려면 명시적 유형 캐스트가 필요합니다.타입 T의 박스형 오브젝트는 T(또는 늘 가능T)[79]에만 박스 해제할 수 있습니다.

예:

인트 후우 = 42;         // 값 유형. 물건 막대기 = 후우;     // foo는 bar에 박스로 표시됩니다. 인트 foo2 = (인트)막대기;  // 값 유형으로 다시 상자를 열었습니다. 

라이브러리

C# 사양은 컴파일러가 사용할 수 있을 것으로 예상되는 최소 유형 및 클래스 라이브러리 세트에 대해 자세히 설명합니다.실제로 C#은 ECMA-335 Common Language Infrastructure(CLI; 공통 언어 인프라스트럭처)로 표준화된 Common Language Infrastructure(CLI; 공통 언어 인프라스트럭처)의 일부 구현에서 가장 많이 사용됩니다.

표준 CLI 사양 외에 위에 구축된 많은 상용 및 커뮤니티 클래스 라이브러리가 있습니다.추가 [80]기능을 제공하는 NET 프레임워크 라이브러리.

C# 는, 리스트에 포함되는 임의의 라이브러리에 콜을 발신할 수 있습니다.NET 라이브러리프레임워크.

안녕 세계

다음은 C#[81]9에 도입된 최상위 스테이트먼트 기능을 사용한 고전적인 "Hello world" 예제 버전인 매우 단순한 C# 프로그램입니다.

사용. 시스템.;  콘솔.기입선("안녕, 세상아!"); 

C# 8 이하로 작성된 코드의 경우, 프로그램의 진입점 로직은 다음과 같은 유형의 메인 메서드로 작성되어야 합니다.

사용. 시스템.;  // 고전적인 "Hello World" 프로그램 버전 학급 프로그램. {     정적인 무효 주된()     {         콘솔.기입선("안녕, 세상아!");     } } 

이 코드는 콘솔 창에 다음 텍스트를 표시합니다.

안녕, 세상아! 

각 행에는 다음과 같은 목적이 있습니다.

사용. 시스템.; 

위의 행은 의 모든 유형을 Import합니다.System네임스페이스.예를 들어,Console소스 코드에서 나중에 사용되는 클래스는Systemnamespace. 즉, 타입의 풀네임(네임스페이스 포함)을 지정하지 않고 사용할 수 있습니다.

// 고전적인 "Hello World" 프로그램 버전 

이 행은 코멘트이며 프로그래머의 코드를 설명하고 문서화합니다.

학급 프로그램. 

위는 의 클래스 정의입니다.Program클래스. 한 쌍의 괄호 사이에 이어지는 모든 것은 클래스를 나타냅니다.

{     ... } 

대괄호는 코드 블록의 경계를 나타냅니다.이 첫 번째 예에서는 이 명령어는 이 명령어의 시작과 끝을 마킹합니다.Program학급.

정적인 무효 주된() 

그러면 프로그램의 실행을 시작하는 클래스 멤버 메서드가 선언됩니다..NET 런타임은Main방법.Java와 달리Main메서드는 필요 없습니다.public키워드: 컴파일러에 임의의 클래스에서 [82]메서드를 호출할 수 있음을 나타냅니다.쓰기static void Main(string[] args)글쓰기와 같다private static void Main(string[] args)static 키워드를 사용하면 메서드에 액세스 할 수 있습니다.Program각 콘솔 어플리케이션의Main진입점을 선언해야 합니다.static그렇지 않으면 프로그램은 의 인스턴스를 필요로 할 것이다.Program단, 어떤 인스턴스라도 프로그램이 필요합니다.해결할 수 없는 순환 의존관계를 피하기 위해 콘솔어플리케이션을 처리하는 C# 컴파일러는 오류가 없는 경우 오류를 보고합니다.static Main방법.void키워드는 다음과 같이 선언합니다.Main반환값이 없습니다.

콘솔.기입선("안녕, 세상아!"); 

이 행은 출력을 씁니다. Console에 있는 스태틱클래스입니다.System네임스페이스.콘솔 응용 프로그램의 표준 입력, 출력 및 오류 스트림에 대한 인터페이스를 제공합니다.프로그램이 호출합니다.Console방법WriteLine콘솔에는 인수(문자열)가 지정된 행이 표시됩니다."Hello, world!".

GUI

Windows GUI 의 예를 다음에 나타냅니다.

사용. 시스템.; 사용. System.Windows.;  학급 프로그램. {     정적인 무효 주된()     {         메시지 박스.표시("안녕, 월드!");         콘솔.기입선("거의 같은 주장이야!");     } } 

이 예시는 이전 예시와 비슷하지만 콘솔에 쓰는 대신 "Hello, World!"라는 메시지가 포함된 대화 상자를 생성합니다.

이미지들

또 다른 유용한 라이브러리는System.Drawing라이브러리 - 프로그래밍 방식으로 이미지를 그리는 데 사용됩니다.예를 들어 다음과 같습니다.

사용. 시스템.; 사용. System. 도면;  일반의 학급  {     일반의 정적인 이미지 img;      정적인 무효 주된()     {         img = 이미지.From File(파일로부터)("Image.png");     } } 

그러면 "Image.png"에 저장된 이미지와 동일한 이미지가 생성됩니다.

표준화 및 라이선스

2001년 8월, Microsoft, Hewlett-Packard, 인텔은, C# 의 사양서 및 공통 언어 인프라스트럭처(CLI)의 표준 기관인 Ecma International 에의 제출을 공동 후원했습니다.2001년 12월 ECMA는 ECMA-334 C# 언어 사양을 발표했습니다.C#는 2003년에 ISO/IEC 표준이 되었습니다(ISO/IEC 23270:2003 - 정보기술 - 프로그래밍 언어 - C#).ECMA는 2002년 12월에 C# 제2판과 동등한 사양을 채택한 바 있습니다.2005년 6월에 ECMA는 C# 사양의 에디션3을 승인하고 ECMA-334를 갱신했습니다.부분 클래스, 익명 메서드, 늘 가능한 유형 및 제네릭(C++ 템플릿과 비슷한 도 있음)이 추가되었습니다.2005년 7월 ECMA는 ISO/IEC JTC 1/SC 22의 패스트트랙 프로세스, 표준 및 관련 TR을 통해 ISO/IEC JTC 1/SC 22에 제출했습니다.이 과정은 보통 6~9개월이 소요됩니다.

C# 언어 정의와 CLI는 ISO/IECEcma 표준에 따라 표준화되어 있어 특허 클레임으로부터 합리적이고 차별 없는 라이선스 보호를 제공합니다.

마이크로소프트는 처음에 [83]OSP가 커버하는 프레임워크의 일부에 대해 비영리 프로젝트에서 특허를 침해했다는 이유로 오픈 소스 개발자들을 고소하지 않기로 합의했습니다.또한 Microsoft는 C#, .NET 또는 Novell의 구현에 대해 명시적으로 언급하지 않은 제품 목록을 제외하고 Novell의 유료[84] 고객에 대해 Novell 제품에 관한 특허를 적용하지 않기로 합의했습니다.NET(Mono Project).[85]그러나 노벨은 Mono가 마이크로소프트 특허를 [86]침해하지 않는다고 주장했다.마이크로소프트는 또한 모노에 의존하는 [87]Moonight 브라우저 플러그인과 관련된 특허권을 Novell을 통해 취득할 경우 강제하지 않기로 특정 계약을 체결했습니다.

10년 후 마이크로소프트는 C#용 무료 오픈 소스 크로스 플랫폼 툴, 즉 Visual Studio Code를 개발하기 시작했습니다.NET Core, 그리고 Roslyn.Mono는 Microsoft 자회사인 Xamarin의 프로젝트로 Microsoft에 입사했습니다.

실장

Microsoft는 오픈 소스 레퍼런스 C# 컴파일러와 툴 세트의 개발을 주도하고 있습니다.첫 번째 컴파일러인 Roslyn은 중간 언어(IL)로 컴파일하고 두 번째 컴파일러인 RyuJIT는 [88]동적이며 즉각적인 최적화를 수행하고 IL을 CPU [89]프런트 엔드의 네이티브 코드로 컴파일합니다.IT는 오픈 소스이며 C++[90]로 기술되어 있습니다.Roslyn은 완전히 관리 코드(C#)로 작성되어 있으며, API로 기능이 공개되어 있습니다.따라서 개발자는 리팩터링 및 진단 도구를 [5][91]만들 수 있습니다.공식 구현의 2가지 브랜치는 입니다.NET Framework(클로즈드 소스, Windows 전용) 및NET Core(오픈 소스, 크로스 플랫폼), 최종적으로 하나의 오픈 소스 구현으로 통합되었습니다.NET 5.0,[92] at.NET Framework 4.6, 새로운 JIT 컴파일러가 기존 [88][93]JIT 컴파일러를 대체했습니다.

기타 C# 컴파일러 (일부 컴파일러에는 공통 언어 인프라스트럭처 및 구현이 포함되어 있습니다)NET 클래스 라이브러리):

  • Microsoft가 후원하는 Mono 프로젝트에서는 오픈 소스 C# 컴파일러, CLI의 완전한 오픈 소스 구현(ECMA 사양에 기재되어 있는 필수 프레임워크 라이브러리 포함) 및 최대까지 거의 완전한 NET 클래스 라이브러리 구현이 제공됩니다.NET Framework 3.5.
  • RemObjects의 Elements 도구 체인에는 C# 코드를 에 컴파일하는 RemObjects C#이 포함되어 있습니다.NET의 공통 중간 언어, Java 바이트 코드, 코코아, Android 바이트 코드, Web Assembly 및 Windows, MacOS 및 Linux용 네이티브 기계 코드.
  • 또한 DotGNU 프로젝트(현재는 단종)는 오픈소스 C# 컴파일러, ECMA 사양에 기재되어 있는 필수 프레임워크 라이브러리를 포함한 공통 언어 인프라스트럭처의 거의 완전한 구현 및 나머지 마이크로소프트 소유의 일부 서브셋을 제공했습니다.최대 NET 클래스 라이브러리NET 2.0 (EMA 사양에 기재되어 있지 않은 것, 또는 기재되어 있지 않은 것, 다만 Microsoft 규격에 포함되어 있는 것).NET Framework 배포).

Unity 게임엔진은 C#을 프라이머리 스크립트 언어로서 사용합니다.고도 게임 엔진은 [94]마이크로소프트로부터 24,000달러를 기부받아 옵션인 C# 모듈을 구현했습니다.

「 」를 참조해 주세요.

메모들

  1. ^ 비동기용
  2. ^ 관례상 숫자 부호는 일반 텍스트의 두 번째 문자에 사용됩니다. 예술적 표현에서는 때때로 진정한 샤프 부호가 사용됩니다: C♯., ECMA 334 표준에서는 "C#이라는 이름은 LATIN 대문자 C(U+0043) 뒤에 NUMBER SIGN #(U+0023)로 기재되어 있습니다."
  3. ^ Microsoft C# 2.0 사양 문서에는 새로운 2.0 기능만 기재되어 있습니다.오래된 기능의 경우 위의 1.2 사양을 사용하십시오.

레퍼런스

  1. ^ "InfoQ eMag: A Preview of C# 7".
  2. ^ https://devblogs.microsoft.com/dotnet/welcome-to-csharp-10/ 참조해 주세요.
  3. ^ https://devblogs.microsoft.com/dotnet/early-peek-at-csharp-11-features/ 참조해 주세요.
  4. ^ Torgersen, Mads (October 27, 2008). "New features in C# 4.0". Microsoft. Retrieved October 28, 2008.
  5. ^ a b "The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.: dotnet/roslyn". November 13, 2019 – via GitHub.
  6. ^ "CoreCLR is the runtime for .NET Core. It includes the garbage collector, JIT compiler, primitive data types and low-level classes.: dotnet/coreclr". November 13, 2019 – via GitHub.
  7. ^ a b Naugler, David (May 2007). "C# 2.0 for C++ and Java programmer: conference workshop". Journal of Computing Sciences in Colleges. 22 (5). Although C# has been strongly influenced by Java it has also been strongly influenced by C++ and is best viewed as a descendant of both C++ and Java.
  8. ^ Hamilton, Naomi (October 1, 2008). "The A-Z of Programming Languages: C#". Computerworld. Retrieved February 12, 2010. We all stand on the shoulders of giants here and every language builds on what went before it so we owe a lot to C, C++, Java, Delphi, all of these other things that came before us. (Anders Hejlsberg)
  9. ^ "Chapel spec (Acknowledgments)" (PDF). Cray Inc. October 1, 2015. Retrieved January 14, 2016.
  10. ^ "Rich Hickey Q&A by Michael Fogus". Archived from the original on January 11, 2017. Retrieved January 11, 2017.
  11. ^ Borenszweig, Ary (June 14, 2016). "Crystal 0.18.0 released!". It's heavily inspired by Ruby, and other languages (like C#, Go and Python).
  12. ^ "Web Languages and VMs: Fast Code is Always in Fashion. (V8, Dart) - Google I/O 2013". YouTube. Archived from the original on December 21, 2021. Retrieved December 22, 2013.
  13. ^ Java 5.0은 유사한 (및 경쟁하는) C# 언어로 도입된 후 몇 가지 새로운 언어 기능(루프, 오토박스, varargs주석 기능 강화)을 추가하였습니다 [1] [2].
  14. ^ Cornelius, Barry (December 1, 2005). "Java 5 catches up with C#". University of Oxford Computing Services. Retrieved June 18, 2014. In my opinion, it is C# that has caused these radical changes to the Java language. (Barry Cornelius)
  15. ^ Lattner, Chris (June 3, 2014). "Chris Lattner's Homepage". Chris Lattner. Retrieved May 12, 2020. The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
  16. ^ a b c C# Language Specification (PDF) (4th ed.). Ecma International. June 2006. Retrieved January 26, 2012.
  17. ^ "Welcome to C# 10". November 8, 2021.
  18. ^ "Announcing .NET 6 -- the Fastest .NET Yet". November 8, 2021.
  19. ^ "Design Goals of C#". www.java-samples.com. Retrieved October 6, 2021.
  20. ^ Zander, Jason (November 22, 2007). "Couple of Historical Facts". Retrieved February 23, 2009.
  21. ^ Guthrie, Scott (November 28, 2006). "What language was ASP.Net originally written in?". Archived from the original on June 24, 2016. Retrieved February 21, 2008.
  22. ^ Hamilton, Naomi (October 1, 2008). "The A-Z of Programming Languages: C#". Computerworld. Archived from the original on May 18, 2019. Retrieved October 1, 2008.
  23. ^ "Details". nilsnaegele.com. Archived from the original on April 7, 2019. Retrieved April 7, 2019.
  24. ^ Wylie Wong (2002). "Why Microsoft's C# isn't". CNET: CBS Interactive. Retrieved May 28, 2014.
  25. ^ Bill Joy (February 7, 2002). "Microsoft's blind spot". cnet.com. Retrieved January 12, 2010.
  26. ^ Klaus Kreft and Angelika Langer (2003). "After Java and C# - what is next?". Retrieved June 18, 2013.
  27. ^ Klaus Kreft and Angelika Langer (July 3, 2003). "After Java and C# - what is next?". artima.com. Retrieved January 12, 2010.
  28. ^ Osborn, John (August 1, 2000). "Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg". O'Reilly Media. Retrieved November 14, 2009. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  29. ^ "Generics (C# Programming Guide)". Microsoft. Retrieved March 21, 2011.
  30. ^ Don Box and Anders Hejlsberg (February 2007). "LINQ: .NET Language-Integrated Query". Microsoft. Retrieved March 21, 2011.
  31. ^ Mercer, Ian (April 15, 2010). "Why functional programming and LINQ is often better than procedural code". abodit.com. Retrieved March 21, 2011.
  32. ^ "Andy Retires". Dan Fernandez's Blog. Blogs.msdn.com. January 29, 2004. Archived from the original on January 19, 2016. Retrieved October 4, 2012.
  33. ^ "Technical committees - JTC 1/SC 22 - Programming languages, their environments and system software interfaces". ISO. Retrieved October 4, 2012.
  34. ^ "ISO/IEC 23270:2003 - Information technology - C# Language Specification". Iso.org. August 23, 2006. Archived from the original on May 8, 2012. Retrieved October 4, 2012.
  35. ^ "ISO/IEC 23270:2006 - Information technology - Programming languages - C#". Iso.org. January 26, 2012. Retrieved October 4, 2012.
  36. ^ "SO/IEC 23270:2018 Information technology — Programming languages — C#". ISO. Retrieved November 26, 2020.
  37. ^ Mariani, Rico. "My History of Visual Studio (Part 1) – Rico Mariani's Performance Tidbits". Rico Mariani's Performance Tidbits.
  38. ^ Kovacs, James (September 7, 2007). "C#/.NET History Lesson". Retrieved June 18, 2009.
  39. ^ Hejlsberg, Anders (October 1, 2008). "The A-Z of Programming Languages: C#". Computerworld.
  40. ^ "Microsoft C# FAQ". Microsoft. Archived from the original on February 14, 2006. Retrieved March 25, 2008.
  41. ^ "F# FAQ". Microsoft Research. Archived from the original on February 18, 2009. Retrieved June 18, 2009.
  42. ^ Simon, Raphael; Stapf, Emmanuel; Meyer, Bertrand (June 2002). "Full Eiffel on the .NET Framework". Microsoft. Retrieved June 18, 2009.
  43. ^ "What's new in the C# 2.0 Language and Compiler". Microsoft. Archived from the original on December 18, 2010. Retrieved June 11, 2014.
  44. ^ Hejlsberg, Anders; Torgersen, Mads. "Overview of C# 3.0". Microsoft Developer Network. Microsoft. Retrieved June 11, 2014.
  45. ^ a b "Using C# 3.0 from .NET 2.0". Danielmoth.com. May 13, 2007. Retrieved October 4, 2012.
  46. ^ Hejlsberg, Anders. "Future directions for C# and Visual Basic". C# lead architect. Microsoft. Retrieved September 21, 2011.
  47. ^ "An Introduction to New Features in C# 5.0". MSDN Blogs. Microsoft. Archived from the original on June 4, 2014. Retrieved June 11, 2014.
  48. ^ "Language feature implementation status". github. Microsoft. Archived from the original on January 12, 2016. Retrieved February 13, 2015.
  49. ^ "What's new in C# 7". Microsoft Docs. December 21, 2016.
  50. ^ "New Features in C# 7.0". .NET Blog. March 9, 2017. Retrieved June 9, 2017.
  51. ^ "What's new in C# 7.1". Microsoft Docs. Retrieved October 9, 2017.
  52. ^ "Visual Studio 2017 15.3 Release Notes". docs.microsoft.com.
  53. ^ "What's new in C# 7.2". Microsoft Docs. Retrieved November 26, 2017.
  54. ^ a b "Visual Studio 2017 15.9 Release Notes". docs.microsoft.com.
  55. ^ "What's new in C# 7.3". Microsoft Docs. Retrieved June 23, 2018.
  56. ^ "What's new in C# 8.0". Microsoft Docs.
  57. ^ a b "Visual Studio 2019 16.8 Release Notes". docs.microsoft.com.
  58. ^ BillWagner. "What's new in C# 9.0 - C# Guide". docs.microsoft.com. Retrieved October 15, 2020.
  59. ^ "What's new in C# 10". docs.microsoft.com. Retrieved November 10, 2021.
  60. ^ "Visual Studio 2022 version 17.0 Release Notes". docs.microsoft.com.
  61. ^ Visual Studio 2010 and .NET 4 Six-in-One. Wrox Press. 2010. ISBN 978-0470499481.
  62. ^ BillWagner. "Expression Trees (C#)". docs.microsoft.com. Retrieved May 14, 2021.
  63. ^ McAllister, Neil (October 20, 2011). "Microsoft's Roslyn: Reinventing the compiler as we know it". InfoWorld. Retrieved March 5, 2022.
  64. ^ "Introducing C# Source Generators". .NET Blog. April 29, 2020. Retrieved May 14, 2021.
  65. ^ "virtual (C# Reference)". docs.microsoft.com.
  66. ^ "Auto-Implemented Properties (C# Programming Guide)". Retrieved September 12, 2020.
  67. ^ "using directive - C# Reference". Microsoft Docs. Retrieved April 14, 2019.
  68. ^ BillWagner. "Unsafe code, pointers to data, and function pointers". docs.microsoft.com. Retrieved June 20, 2021.
  69. ^ "How to create user-defined exceptions". Retrieved September 12, 2020.
  70. ^ Venners, Bill; Eckel, Bruce (August 18, 2003). "The Trouble with Checked Exceptions". Retrieved March 30, 2010.
  71. ^ BillWagner. "Operator overloading - C# reference". docs.microsoft.com. Retrieved June 20, 2021.
  72. ^ Zhang, Xue Dong; Teng, Zi Mu; Zhao, Dong Wang (September 2014). "Research of the Database Access Technology Under.NET Framework". Applied Mechanics and Materials. 644–650: 3077–3080. doi:10.4028/www.scientific.net/AMM.644-650.3077. S2CID 62201466. ProQuest 1565579768.
  73. ^ Otey, Michael (February 2006). "LINQ to the Future". SQL Server Magazine. Vol. 8, no. 2. pp. 17–21. ProQuest 214859896.
  74. ^ Sheldon, William (November 2010). "New Features in LINQ". SQL Server Magazine. Vol. 12, no. 11. pp. 37–40. ProQuest 770609095.
  75. ^ a b BillWagner. "Anonymous functions - C# Programming Guide". docs.microsoft.com. Retrieved May 15, 2021.
  76. ^ "What's New in C# 7.0". Microsoft Docs. Retrieved April 14, 2019.
  77. ^ "C# 9.0 on the record". .NET Blog. November 10, 2020. Retrieved May 15, 2021.
  78. ^ a b c d Archer, Tom (2001). "Part 2, Chapter 4: The Type System". Inside C#. Redmond, Washington: Microsoft Press. ISBN 0-7356-1288-9.
  79. ^ Lippert, Eric (March 19, 2009). "Representation and Identity". Fabulous Adventures In Coding. Blogs.msdn.com. Retrieved October 4, 2012.
  80. ^ "Framework Libraries". docs.microsoft.com.
  81. ^ BillWagner. "What's new in C# 9.0 - C# Guide". docs.microsoft.com. Retrieved May 14, 2021.
  82. ^ BillWagner. "Main() and command-line arguments". docs.microsoft.com. Retrieved August 5, 2021.
  83. ^ "Patent Pledge for Open Source Developers".
  84. ^ "Patent Cooperation Agreement - Microsoft & Novell Interoperability Collaboration". Microsoft. November 2, 2006. Archived from the original on May 17, 2009. Retrieved July 5, 2009. Microsoft, on behalf of itself and its Subsidiaries (collectively "Microsoft"), hereby covenants not to sue Novell's Customers and Novell's Subsidiaries' Customers for infringement under Covered Patents of Microsoft on account of such a Customer's use of specific copies of a Covered Product as distributed by Novell or its Subsidiaries (collectively "Novell") for which Novell has received Revenue (directly or indirectly) for such specific copies; provided the foregoing covenant is limited to use by such Customer (i) of such specific copies that are authorized by Novell in consideration for such Revenue, and (ii) within the scope authorized by Novell in consideration for such Revenue.
  85. ^ "Definitions". Microsoft. November 2, 2006. Retrieved July 5, 2009.
  86. ^ Steinman, Justin (November 7, 2006). "Novell Answers Questions from the Community". Retrieved July 5, 2009. We maintain that Mono does not infringe any Microsoft patents.
  87. ^ "Covenant to Downstream Recipients of Moonlight - Microsoft & Novell Interoperability Collaboration". Microsoft. September 28, 2007. Archived from the original on September 23, 2010. Retrieved March 8, 2008. "Downstream Recipient" means an entity or individual that uses for its intended purpose a Moonlight Implementation obtained directly from Novell or through an Intermediate Recipient... Microsoft reserves the right to update (including discontinue) the foregoing covenant... "Moonlight Implementation" means only those specific portions of Moonlight 1.0 or Moonlight 1.1 that run only as a plug-in to a browser on a Personal Computer and are not licensed under GPLv3 or a Similar License.
  88. ^ a b "The RyuJIT transition is complete!". microsoft.com. June 19, 2018. Archived from the original on July 19, 2019. Retrieved July 20, 2021.
  89. ^ "Managed Execution Process". microsoft.com. Archived from the original on December 23, 2017. Retrieved July 20, 2021.
  90. ^ "coreclr/src/jit/". github.com. Archived from the original on January 9, 2019. Retrieved July 20, 2021.
  91. ^ "C# Guide". docs.microsoft.com.
  92. ^ "5.0.8". microsoft.com. Archived from the original on April 23, 2020. Retrieved July 20, 2021.
  93. ^ "Mitigation: New 64-bit JIT Compiler". microsoft.com. Archived from the original on April 5, 2018. Retrieved July 20, 2021.
  94. ^ Etcheverry, Ignacio (October 21, 2017). "Introducing C# in Godot". Godot Engine. Archived from the original on October 26, 2018. Retrieved October 26, 2018.

추가 정보

외부 링크