C 샤프
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
C#은 마이크로소프트가 개발한 객체 지향 프로그래밍 언어이다. .NET 프레임워크를 기반으로 하며, 자바와 유사한 문법을 가지고 있다. 1999년 아네르스 하일스베르가 이끄는 팀에 의해 Cool이라는 이름으로 개발되었으며, 2000년 C#으로 명칭이 변경되었다. C#은 ISO/IEC 표준으로 채택되었으며, 다양한 개발 도구와 컴파일러를 지원한다. 주요 특징으로는 포인터 사용, 메모리 관리, 예외 처리, 네임스페이스, 프로퍼티, 제네릭, LINQ, 비동기 프로그래밍 등을 제공하며, C++에 비해 단순화되고 형 안전성이 강화되었다. C#은 마이크로소프트 비주얼 C#, Mono, Roslyn 등의 컴파일러를 통해 사용 가능하며, 윈도우, 리눅스, macOS 등 다양한 플랫폼에서 활용된다.
더 읽어볼만한 페이지
- C 샤프 - Cω
- C 샤프 - 마이크로소프트 비주얼 C 샤프
마이크로소프트 비주얼 C#은 객체 지향 프로그래밍 언어로서 다양한 프로젝트 형식을 지원하여 콘솔, Windows Forms, ASP.NET 웹 응용 프로그램 등 폭넓은 응용 프로그램 개발에 사용되며, .NET Framework 환경에서 자매 언어들과 함께 사용된다. - 2001년 개발된 프로그래밍 언어 - 라이브코드
라이브코드는 Transcript 언어를 사용하여 여러 운영체제에서 실행되는 애플리케이션을 생성하는 프로그래밍 플랫폼이며, 초보자도 쉽게 배울 수 있는 영어 유사 구문과 다양한 고급 기능을 제공한다. - 2001년 개발된 프로그래밍 언어 - D (프로그래밍 언어)
D는 월터 브라이트가 개발하여 2001년 12월에 처음 출시된 프로그래밍 언어로, C/C++와 유사한 구문과 가비지 컬렉션 등의 현대적인 기능을 제공하며, 다양한 프로그래밍 패러다임을 지원하는 시스템 프로그래밍 언어이다. - ISO 표준 프로그래밍 언어 - C (프로그래밍 언어)
C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다. - ISO 표준 프로그래밍 언어 - SQL
SQL은 관계형 데이터베이스 관리 시스템에서 데이터를 관리하고 조작하기 위해 설계된 표준 프로그래밍 언어로서, 데이터 정의어, 데이터 조작어, 데이터 제어어를 포함하는 다양한 명령어 문법을 제공하며 ANSI와 ISO에 의해 표준으로 채택되었다.
C 샤프 - [IT 관련 정보]에 관한 문서 | |
---|---|
일반 정보 | |
![]() | |
종류 | 프로그래밍 언어 |
패러다임 | 다중 패러다임 프로그래밍 언어: 구조적 프로그래밍 명령형 프로그래밍 객체 지향 프로그래밍 사건 기반 프로그래밍 태스크 구동 함수형 프로그래밍 제네릭 프로그래밍 반사 프로그래밍 병행 컴퓨팅 |
계열 | C |
발표 연도 | 2000년 |
설계자 | 안데르스 하일스베르그 (마이크로소프트) |
개발자 | 매즈 토거슨 (마이크로소프트) |
최신 버전 | 13.0 |
최신 릴리스 날짜 | 2024년 11월 12일 |
최신 미리보기 버전 | 13.0 |
최신 미리보기 날짜 | 2024년 10월 15일 |
타이핑 | 정적 동적 강한 안전 명목적 부분적으로 추론됨 |
메모리 관리 | 자동 메모리 관리 |
구현체 | Visual C# .NET Mono 유니버설 윈도우 플랫폼 단종: .NET Framework DotGNU |
방언 | Cω Polyphonic C# Enhanced C#(http://ecsharp.net) |
영향을 준 언어 | C++ Cω Eiffel F# Haskell Scala Icon J# J++ Java ML Modula-3 Object Pascal VB |
영향을 받은 언어 | Chapel Clojure Crystal D J# Dart F# Hack Java Kotlin Nemerle Oxygene Rust Swift Vala TypeScript |
플랫폼 | 공통 언어 인프라 |
라이선스 | Roslyn 컴파일러: MIT/X11 .NET Core CLR: MIT/X11 Mono 컴파일러: 이중 GPLv3 및 MIT/X11 DotGNU: 이중 GPL 및 LGPL |
파일 확장자 | .cs, .csx |
웹사이트 | C# 공식 웹사이트 |
2. 역사
닷넷 프레임워크 개발 당시 클래스 라이브러리는 SMC(Simple Managed C)라는 관리 코드를 사용했다.[194] 1999년 1월, 아네르스 하일스베르가 이끄는 팀이 Cool(C-like Object Oriented Language)이라는 새로운 언어를 개발했다. 마이크로소프트는 언어의 최종 이름을 Cool로 유지하려 했으나, 상표 문제로 인해 C#으로 결정되었다. 2000년 7월 PDC에서 닷넷 프로젝트가 발표될 때 클래스 라이브러리와 ASP.NET 런타임은 C#으로 옮겨갔다.[15][16][17] Turbo Pascal과 Delphi를 개발한 안데르스 하일스베르는 C#의 수석 설계자이자 마이크로소프트의 수석 아키텍트였다.
C#은 SC 22 ISO/IEC JTC 1 하위 위원회에 ISO/IEC 23270:2003으로 제출되었으나 철회 후 ISO/IEC 23270:2006으로 등록되었다.[27][28] 23270:2006은 23270:2018에서 철회되었으며 이 버전으로 승인되었다.[29]
1994년에 Java를 만든 James Gosling과 Java의 창시자인 Sun Microsystems의 공동 창업자인 Bill Joy는 C#을 Java의 "모방"이라고 불렀다. Gosling은 더 나아가 "[C#은] 신뢰성, 생산성, 보안이 제거된 Java와 같은 것"이라고 말했다.[19][20]
2005년 11월 C# 2.0 출시 이후, C#과 Java는 점점 더 다른 궤도를 그리며 진화하여 두 개의 매우 다른 언어가 되었다. 가장 큰 차이점 중 하나는 두 언어 모두에 제네릭이 추가되면서 구현이 크게 달라진 것이다. C#은 구체화를 사용하여 다른 클래스와 마찬가지로 사용할 수 있는 "일급" 제네릭 객체를 제공하며, 코드 생성은 클래스 로드 시점에 수행된다.[22] 또한 C#은 람다 표현식, extension methods, anonymous types의 지원 프레임워크와 함께 C# 3.0으로 출시된 LINQ 확장을 포함하여, 함수형 스타일 프로그래밍을 수용하기 위해 몇 가지 주요 기능을 추가했다.[23]
C#은 원래 Anders Hejlsberg의 이름을 따서 명명된 Andy라는 mascot을 가지고 있었다. 이 마스코트는 2004년 1월 29일에 은퇴했다.[25]
C#은 공통 언어 기반 (공통 언어 런타임 등)이 해석하는 공통 중간 언어로 컴파일되어 실행된다. 또한 멀티 패러다임을 지원하는 범용 고수준 프로그래밍 언어이다.
공통 언어 기반 (CLI)과 같은 주변 기술을 포함하여, 마이크로소프트 프레임워크인 '''「.NET」'''의 일부이다. .NET 구상에서 중심적인 개발 언어이며, XML 웹 서비스나 ASP.NET의 기술에도 사용된다.
마이크로소프트의 통합 개발 환경(Microsoft Visual Studio)에서는 Microsoft Visual C#이 C#에 대응한다. 또한 Visual Studio Code에 전용 C#용 확장(C# DevKit)을 도입함으로써 크로스 플랫폼에서 개발하는 것이 가능하다.[117]
공통 언어 사양의 CLS에 의해, 다른 CLS 준수 언어(F#나 Visual Basic .NET나 Visual C++ (C++/CLI) 등)와 상호 연동할 수 있다.
- ECMA-334 3판/4판/5판에 따르면, '''C#'''은 "'''C Sharp'''"(씨 샤프)로 발음하며, '''LATIN CAPITAL LETTER C (U+0043)''' 다음에 '''NUMBER SIGN # (U+0023)'''를 쓴다.[187]
- "#" 접미사는 J#, A#, F#를 포함한 다른 .NET 언어와 Gtk#, Cocoa# 등의 라이브러리에도 사용된다. 그 외에도, SharpDevelop 등 "Sharp"을 관하는 관련 소프트웨어도 존재한다.
- C#이라는 명칭은 "C 언어를 개량한 것"을 의미한다는 설이 있다.
- 안데르스 헤일스베르는, "C#"이 "C++++"(즉, "C++을 더 발전시킨 것")처럼 보이는 것에서 유래했다고 말했다.[189][190]
2. 1. 개발 배경
닷넷 프레임워크 개발 당시 클래스 라이브러리는 SMC(Simple Managed C)라는 관리 코드(managed code)를 사용했었다.[194]1999년 1월, 아네르스 하일스베르가 이끄는 팀이 새로운 언어인 Cool(C-like Object Oriented Language)을 개발했다. 마이크로소프트는 언어의 최종 이름을 Cool로 유지하는 것을 고려했으나, 상표 문제로 인해 그렇게 하지 않았다. 2000년 7월 PDC에서 닷넷 프로젝트가 발표될 때 즈음 Cool의 이름은 C#으로 정해졌고 클래스 라이브러리와 ASP.NET 런타임은 C#으로 옮겨갔다.[15][16][17]
C# 개발에는 Turbo Pascal과 Delphi를 개발한 안데르스 헤일스베르를 필두로 다수의 Delphi 개발진이 참여했다.
2. 2. 안데르스 헤일스베르
안데르스 헤일스베르는 C#의 수석 설계자이자 마이크로소프트의 수석 아키텍트이다. 그는 이전에 Turbo Pascal, Embarcadero Delphi(구 CodeGear Delphi, Inprise Delphi 및 Borland Delphi), Visual J++의 설계에 참여했다.[18] 그는 인터뷰와 기술 논문에서 대부분의 주요 프로그래밍 언어(예: C++, Java, Delphi, Smalltalk)의 결함[18]이 CLR(공통 언어 런타임)의 기본 원리를 이끌었고, 이는 다시 C# 언어의 설계를 이끌었다고 말했다.2000년 7월, 헤일스베르는 C#이 "Java 클론이 아니"며 설계에서 "C++에 훨씬 더 가깝다"고 말했다.[21]
3. 언어 특징
C#은 마이크로소프트 닷넷 플랫폼을 기반으로 동작하는 프로그래밍 언어이다. 자바와 문법적으로 유사하며, 닷넷 플랫폼 기술도 자바의 영향을 많이 받았다. 하지만 C#은 플랫폼 간 상호 운용성을 위해 '불안전 코드(unsafe code)'[193]와 같은 기술을 사용한다. C#의 기본 자료형은 닷넷 객체 모델을 따르며, 쓰레기 수집 기능을 제공하고, 객체 지향 언어의 요소(클래스, 인터페이스, 위임, 예외 등)를 모두 포함한다.
C#이라는 이름은 올림표에서 유래했다. C++에서 '++'가 변수 값을 1 증가시키는 것처럼, 올림표는 반음 올림을 의미하며 C++을 한 번 더 발전시켰다는 의미를 담고 있다. 기본 글꼴이나 브라우저의 기술적 한계로 인해 문서에서는 올림표 대신 해시 기호를 사용하지만, 마이크로소프트는 광고 등에서 올림표를 사용한다.[195]
C#은 C 언어, C++, 자바와 구별되는 특징을 가지며, Turbo Pascal, Delphi를 개발한 안데르스 헤일스베르가 개발에 참여했다. C 계열 언어의 구문, Delphi의 요소, async/await 구문, TypeScript의 제네릭스 등 타 언어의 영향도 받았다.
C#은 공통 언어 기반(공통 언어 런타임 등)이 해석하는 공통 중간 언어로 컴파일되어 실행된다. 정적 형식 지정, 타입 세이프, 스코프, 명령형, 선언형, 함수형, 범용형, 객체 지향(클래스 기반), 컴포넌트 지향 프로그래밍 등 멀티 패러다임을 지원한다. 자동 박싱, 델리게이트, 프로퍼티, 인덱서, 사용자 지정 특성, 포인터 연산 조작, 구조체 (값 형식 객체), 다차원 배열, 가변 길이 인수, async/await 구문, null 안전 등의 기능을 제공한다. Java와 마찬가지로 대규모 라이브러리, 프로세서 아키텍처에 의존하지 않는 실행 형태, 가비지 컬렉션, JIT 컴파일에 의한 실행 속도 향상, AOT 컴파일러에 의한 고속 실행 등이 가능하다.
공통 언어 기반(CLI)은 마이크로소프트 .NET 프레임워크의 일부이다. C#은 .NET 구상의 중심 개발 언어이며, XML(Extensible Markup Language) 웹 서비스나 ASP.NET 기술에도 사용된다. 다른 .NET 계열 언어로도 기술할 수 있지만, .NET API는 C#에서의 이용을 최우선으로 고려하며, 다른 .NET 계열 언어에서는 이용할 수 없거나, 향후 이용할 수 없게 될 기능이 존재한다.
Microsoft Visual Studio(통합 개발 환경)의 Microsoft Visual C# 또는 Visual Studio Code의 C# 확장(C# DevKit)을 통해 C# 개발이 가능하다.[117]
공통 언어 사양의 CLS에 의해, 다른 CLS 준수 언어와 상호 연동할 수 있다. C#은 CLI 기능을 가장 잘 반영하는 언어이며, C#의 내장형 대부분은 CLI 프레임워크에 구현된 값 형식과 대응된다.
C# 언어 사양은 컴파일러의 코드 생성에 대해 언급하지 않지만, 현재 모든 C# 컴파일러는 CLI를 대상으로 한다. .NET 7.0 이후 '''"Native AOT"'''를 통해 환경 의존적인 바이너리 출력이 가능하지만, 이 역시 CLI와 런타임을 사전에 변환하는 방식이다.[151] IL2CPP[152]와 "Burst"[153]는 CIL을 C++ 코드 또는 LLVM 컴파일러로 네이티브 바이너리로 컴파일하는 특수한 예이다.
C#은 C/C++에 비해 다양한 제한 및 개선 사항이 추가되었고, Java의 제한 및 개선 사항을 채택하거나, C#의 개선 사항이 Java에 유사하게 채택되기도 했다.
- 외부 블록 변수와 동일한 이름의 변수를 내부 블록에서 다시 선언(섀도잉)할 수 없다.
- 부울형 `bool`이 존재하며, `while`문이나 `if`문에는 `bool`형 식을 사용해야 한다.
- `switch` 문에 정수형 외에 문자열형 `string`을 사용할 수 있고, `case` 레이블에 문자열 리터럴(문자열 상수)을 사용할 수 있다.
- C# 7.0 이후 `case` 레이블에 복잡한 패턴 매칭이 가능하다.[157]
- 내장형 크기 및 내부 표현은 플랫폼에 의존하지 않는다. 부동 소수점 수는 IEEE 754를 준수하고,[158] 문자 및 문자열은 UTF-16 인코딩을 채택한다.[159]
- C# 9.0 이후 CPU에 따라 크기가 다른 정수형 `nint/nuint`가 추가되었다.[160]
- C# 11.0 이후 UTF-8로 처리하는 "UTF-8 문자열 리터럴"이 추가되었다.[161]
- 전역 변수나 전역 메서드는 존재하지 않으며, 모든 필드와 메서드는 클래스 또는 구조체의 일부로 선언되어야 한다.
- 클래스(`class`)는 참조 형식, 구조체(`struct`) 및 열거형(`enum`)은 값 형식이다. 구조체는 가볍고 C/C++ 상호 운용성이 뛰어나지만 파생 형식을 정의할 수 없다.
- 클래스 및 구조체는 여러 인터페이스를 구현할 수 있지만, 다중 상속은 지원되지 않는다.
- C#은 C++에 비해 형식 안전성이 높고, 기본 암시적 변환은 안전한 변환으로만 제한된다.
- C#은 "Null 안전"하며, Null 허용 형식, Null 허용 참조 형식을 가지며, Null 병합 연산자 등의 구문·연산자를 가진다.
- 열거형의 멤버는 열거형의 스코프 안에 배치되며, 열거형의 상수 이름을 얻을 수 있다.
3. 1. 설계 목표
C#은 다음과 같은 설계 목표를 가지고 있다.[13]- 단순하고 현대적이며, 범용적인 객체 지향 프로그래밍 언어이다.
- 강력한 형식 검사, 배열 범위 검사, 초기화되지 않은 변수 사용 시도 감지, 자동 가비지 수집과 같은 소프트웨어 공학 원칙을 지원하여 소프트웨어의 견고성, 내구성 및 프로그래머 생산성을 높인다.
- 분산 환경에서 배포하기에 적합한 소프트웨어 구성 요소 개발에 사용하도록 설계되었다.
- C와 C++에 익숙한 프로그래머에게 이식성을 제공한다.
- 국제화를 지원한다.
- 정교한 운영 체제를 사용하는 대규모 애플리케이션부터 소규모 임베디드 시스템까지 다양한 환경을 지원한다.
- C# 애플리케이션은 메모리 및 처리 능력 요구 사항 면에서 경제적이어야 하지만, C나 어셈블리 언어만큼의 성능 및 크기를 목표로 하지는 않는다.[14]
3. 2. 문법
C#의 기본 문법은 C, C++, 자바 등 C 스타일 언어와 유사하다.- 세미콜론으로 선언문의 끝을 나타낸다.
- 중괄호로 선언문을 묶는다. 보통 선언문은 메소드(함수)로, 메소드는 클래스로, 클래스는 네임스페이스로 묶인다.
- 변수에 등호를 사용해서 값을 대입하고, 두 개의 등호("==")를 사용해 비교한다.
- 대괄호는 배열의 선언 및 인덱스 접근 모두에 사용된다.[115]
```csharp
string logMsg = """
원인 불명의 오류가 발생했습니다.
자세한 내용은 로그 파일 "C:\Logs\exception.log"를 확인하십시오.
""";
```
이스케이프 문자를 나타내는 이스케이프 시퀀스로 `\e`가 추가되었다.
3. 3. 주요 기능
C#은 설계상 기본적인 공용 언어 인프라(CLI)를 가장 직접적으로 반영하는 프로그래밍 언어이다. 대부분의 고유 형식은 CLI 프레임워크에서 구현된 값 형식에 해당한다.C#은 `var` 키워드를 사용한 강력하고 암시적으로 형식화된 변수 선언과 컬렉션 이니셜라이저가 뒤따르는 `new[]` 키워드를 사용한 암시적으로 형식화된 배열을 지원한다.
형식 시스템은 기본 제공 숫자 형식 및 사용자 정의 구조체와 같은 값 형식과 배열, 클래스 인스턴스 및 문자열을 포함하는 참조 형식으로 나뉜다. 값 형식은 매개변수로 사용될 때 자동으로 복사본으로 전달되며, 참조 형식은 해당 객체에 대한 포인터만 전달한다. 문자열은 등가 연산자의 특별한 처리로 인해 모든 실질적인 목적에 대해 값처럼 동작하며, switch 문 레이블로 사용할 수도 있다. 필요한 경우 값 형식은 자동으로 boxing된다.[65]
C#은 엄격한 부울 데이터 형식 `bool`을 지원한다. `while` 및 `if`와 같이 조건을 사용하는 문은 `true` 연산자를 구현하는 형식의 표현식을 필요로 한다. C#은 프로그래머가 정확히 `bool`을 반환하는 표현식을 사용하도록 강제하여 `if (a = b)`(등가 `==` 대신 할당 `=` 사용)과 같은 특정 유형의 프로그래밍 실수를 방지한다.
C#은 C++보다 더 형식 안전하다. 기본적으로 허용되는 유일한 암시적 변환은 정수 확대를 포함하여 안전하다고 간주되는 변환이다. 부울과 정수 사이, 열거형 멤버와 정수 사이에는 암시적 변환이 발생하지 않는다(리터럴 0은 모든 열거형 형식으로 암시적으로 변환될 수 있다는 점은 예외). 모든 사용자 정의 변환은 명시적 또는 암시적으로 표시되어야 한다.
C#은 C++과 달리 제네릭 형식에서 공변성 및 반공변성에 대한 명시적인 지원을 제공한다.
열거형 멤버는 자체 범위에 배치된다.
C# 언어는 전역 변수 또는 함수를 허용하지 않는다. 모든 메서드와 멤버는 클래스 내에서 선언되어야 한다. 공용 클래스의 정적 멤버는 전역 변수 및 함수를 대신할 수 있다.
지역 변수는 포함하는 블록의 변수를 가릴 수 없다.
메타프로그래밍은 여러 가지 방법으로 구현할 수 있다.
- 리플렉션은 .NET API를 통해 지원된다.
- 식 트리[66]는 코드를 추상 구문 트리로 나타낸다.
- 어트리뷰트는 메타데이터이며, 자바의 어노테이션과 유사하다.
- `System.Reflection.Emit` 네임스페이스,[67]는 런타임에 메타데이터와 CIL(타입, 어셈블리 등)을 내보내는 클래스를 포함한다.
- .NET 컴파일러 플랫폼(Roslyn)은 언어 컴파일 서비스에 대한 API 액세스를 제공한다.[68]
- 소스 생성기,[69] Roslyn C# 컴파일러의 기능으로, 컴파일 시점에 메타프로그래밍을 가능하게 한다.
C#에서 ''메서드''는 필드의 단순히 값을 보유하는 기능이 아닌, 함수(일련의 명령어)로 호출될 수 있는 클래스의 멤버이다.[70] C#의 ''확장 메서드''를 사용하면 프로그래머가 정적 메서드를 클래스의 메서드 테이블에서 메서드인 것처럼 사용할 수 있다.
`dynamic` 형식은 런타임 메서드 바인딩을 허용하여 JavaScript와 유사한 메서드 호출 및 런타임 객체 구성을 허용한다.
C#은 `delegate` 키워드를 통해 강력한 형식의 함수 포인터를 지원한다. C#은 특성 `[MethodImpl(MethodImplOptions.Synchronized)]`를 통해 Java와 유사한 `synchronized` 메서드 호출을 제공하며, 키워드 `lock`을 통해 상호 배타적 잠금을 지원한다.
C++와 달리 C#은 다중 상속을 지원하지 않지만, 클래스는 원하는 수만큼 "인터페이스"를 구현할 수 있다.
자바와 마찬가지로, C#은 동일한 이름과 동일한 유형의 매개변수를 동일한 순서로 갖는 메서드를 포함하는 여러 인터페이스를 구현할 때, 모든 인터페이스를 처리하는 단일 메서드와 필요한 경우 각 인터페이스에 대한 특정 메서드를 모두 허용한다.
그러나 자바와 달리 C#은 연산자 오버로딩을 지원한다.[82]
C#은 또한 함수 오버로딩을 제공한다.[83]
C#은 버전 2.0부터 파라메트릭 다형성을 제공한다. 예를 들어, `List
C#은 주로 명령형 언어이지만, 시간이 지남에 따라 지속적으로 함수형 프로그래밍 기능을 추가해왔다.[90][91] 예를 들면 다음과 같다.
- 일급 시민으로서의 함수 – C# 1.0 대리자[92]
- 고차 함수 – C# 1.0과 대리자
- 익명 함수 – C# 2 익명 대리자 및 C# 3 람다식[93]
- 클로저 – C# 2와 익명 대리자, C# 3과 람다식[93]
- 형식 추론 – C# 3 암시적으로 형식화된 지역 변수와 C# 9 대상 형식화된 new 식
- 리스트 컴프리헨션 – C# 3 LINQ
- 튜플 – .NET Framework 4.0, 하지만 C# 7.0이 언어 지원과 함께 새로운 튜플 형식을 도입하면서 널리 사용됨[94]
- 중첩 함수 – C# 7.0[94]
- 패턴 매칭 – C# 7.0[94]
- 불변성 – C# 7.2 readonly struct, C# 9 record 형식[95] 및 초기화 전용 setter[96]
- 타입 클래스 – C# 12 역할/확장(개발 중[97])
C# 개발에는 Turbo Pascal과 Delphi를 개발한 안데르스 헤일스베르를 필두로 다수의 Delphi 개발진이 참여했다.
구문은 C 계열 언어(C 언어, C++, Java 등)의 영향을 받았으며, 그 외 요소에서는 Delphi의 영향을 찾아볼 수 있다. 또한 주 언어에 async/await 구문, TypeScript의 제네릭스 채용 등 타 언어의 영향도 보인다.
C#은 공통 언어 기반 (공통 언어 런타임 등)이 해석하는 공통 중간 언어로 컴파일되어 실행된다.
C#은 멀티 패러다임을 지원하는 범용 고수준 프로그래밍 언어이다. 정적 형식 지정, 타입 세이프, 스코프, 명령형, 선언형, 함수형, 범용형, 객체 지향 (클래스 기반), 컴포넌트 지향 프로그래밍 분야를 포함한다. 그 외에도 자동 박싱, 델리게이트, 프로퍼티, 인덱서, 사용자 지정 특성, 포인터 연산 조작, 구조체 (값 형식 객체), 다차원 배열, 가변 길이 인수, async/await 구문, null 안전 등의 기능을 가진다. 또한 Java와 마찬가지로 대규모 라이브러리, 프로세서 아키텍처에 의존하지 않는 실행 형태, 가비지 컬렉션, JIT 컴파일에 의한 실행 속도 향상, AOT 컴파일러에 의한 고속 실행 등이 실현되고 있다.
공통 언어 기반 (CLI)과 같은 주변 기술을 포함하여, 마이크로소프트의 프레임워크인 '''.NET'''의 일부이다.
.NET 구상에서 중심적인 개발 언어이며, XML(Extensible Markup Language) 웹 서비스나 ASP.NET의 기술에도 사용된다. 다른 .NET 계열 언어로도 기술할 수 있지만, .NET API는 C#에서의 이용을 최우선으로 고려하고 있으며, 다른 .NET 계열 언어에서는 이용할 수 없거나, 향후 이용할 수 없게 될 기능이 존재한다.
마이크로소프트의 통합 개발 환경(Microsoft Visual Studio)에서는 Microsoft Visual C#이 C#에 대응한다. 또한 Visual Studio Code에 전용 C#용 확장(C# DevKit)을 도입함으로써 크로스 플랫폼에서 개발하는 것이 가능하다.[117]
공통 언어 사양의 CLS에 의해, 다른 CLS 준수 언어와 상호 연동할 수 있다.
C#은 기반인 CLI의 기능을 가장 잘 반영하는 언어라고 할 수 있다. C#에 있는 내장형의 대부분은 CLI 프레임워크에 구현된 값 형식과 대응된다.
C#의 언어 사양은 컴파일러의 코드 생성에 대해서는 언급하지 않으므로, CLR에 대응해야 한다거나, 공통 중간 언어 (CIL) 등의 특정 형식의 코드를 생성해야 한다고 언급되어 있지 않다.
이론적으로는 C++나 FORTRAN처럼 환경 의존적인 머신어를 생성하는 것도 가능하다. 그러나, 현재 존재하는 모든 C# 컴파일러는 CLI를 타겟으로 하고 있다.
.NET 7.0 이후에는 '''"Native AOT"'''로 배포하여 실행 가능한 환경 의존적인 바이너리를 출력하는 것이 가능하다. 하지만 이 방법도 CLI와 런타임을 사전에 각 아키텍처에 맞는 바이너리로 변환하는 것일 뿐, CLI를 경유하는 것에는 변함이 없다.[151]
Unity의 Scripting Backend인 "IL2CPP" [152]와 "Burst" [153]는 특수한 예이다.
IL2CPP는 C#을 컴파일한 CIL을 다시 C++ 코드로 변환한 후, 네이티브 바이너리로 C++ 컴파일러에 의해 컴파일된다. Burst는 C#을 컴파일한 CIL을 LLVM 컴파일러로 네이티브 바이너리로 컴파일한다.
- 외부 블록에서 선언한 변수와 동일한 이름의 변수를 내부 블록에서 다시 선언(섀도잉)할 수 없다.
- C#에는 부울형 `bool`이 존재하며, `while`문이나 `if`문과 같이 조건을 사용하는 구문에는 `bool`형의 식을 제공해야 한다.
- `switch` 문에 정수형 또는 정수형에 준하는 형식뿐만 아니라 문자열형 `string`을 사용할 수 있다. `case` 레이블에는 문자열 리터럴(문자열 상수)을 사용할 수 있다.
- * C# 7.0 이후에서는 `case` 레이블에 복잡한 패턴 매칭을 수행할 수 있다.[157]
- 내장형의 크기 및 내부 표현은 플랫폼이나 처리계에 의존하지 않는다. 부동 소수점 수는 IEEE 754를 준수한다.[158] 문자 및 문자열은 UTF-16 인코딩을 채택한다.[159]
- * C# 9.0 이후에는 CPU에 따라 크기가 다른 정수형 `nint/nuint`가 추가되었다.[160]
- * C# 11.0 이후에는 문자열을 UTF-8로 처리하는 "UTF-8 문자열 리터럴"이 추가되었다.[161]
- 전역 변수나 전역 메서드는 존재하지 않는다. 모든 필드와 메서드는 클래스 또는 구조체의 일부로 선언되어야 한다.
- 클래스(`class`)는 참조 형식이며, 구조체(`struct`) 및 열거형(`enum`)은 값 형식이다. 구조체는 클래스보다 가볍고, C/C++와의 상호 운용성이 뛰어나지만, 파생 형식을 정의할 수 없다.
- 클래스 및 구조체는 여러 인터페이스를 구현할 수 있지만, 다중 상속은 지원되지 않는다.
- C#은 C++에 비해 형식 안전성이 높다. 기본 암시적 변환은 안전한 변환으로만 제한된다.
- C#은 "Null 안전"하다. Null 허용 형식, Null 허용 참조 형식을 가지며, Null 병합 연산자 등의 구문·연산자를 가진다.
- 열거형의 멤버는 열거형의 스코프 안에 배치된다. 또한, 열거형의 상수 이름을 얻을 수 있다.
3. 3. 1. 포인터
C#에서는 `unsafe`로 특별히 표시된 블록 내에서만 메모리 주소 포인터를 사용할 수 있다.[78] `unsafe` 코드를 포함하는 프로그램은 실행하기 위해 적절한 권한이 필요하다. 대부분의 객체 접근은 안전한 객체 참조를 통해 이루어지며, 이는 항상 "라이브" 객체를 가리키거나 잘 정의된 null 값을 갖는다. "죽은" 객체(가비지 수집된 객체) 또는 임의의 메모리 블록에 대한 참조를 얻는 것은 불가능하다. `unsafe` 포인터는 클래스 인스턴스, 배열 또는 문자열과 같이 가비지 수집의 대상이 되는 객체에 대한 참조를 포함하지 않는 관리되지 않는 값 형식의 인스턴스를 가리킬 수 있다. `unsafe`로 표시되지 않은 코드는 `System.IntPtr` 형식을 통해 포인터를 저장하고 조작할 수 있지만, 역참조할 수는 없다.관리되는 메모리는 명시적으로 해제할 수 없으며, 대신 자동으로 가비지 수집된다. 가비지 수집은 대부분의 경우 더 이상 필요하지 않은 메모리를 해제하는 책임을 프로그래머로부터 제거함으로써 메모리 누수 문제를 해결한다. 객체에 대한 참조를 필요 이상으로 오래 유지하는 코드는 여전히 필요 이상의 메모리 사용량을 경험할 수 있지만, 객체에 대한 마지막 참조가 해제되면 메모리는 가비지 수집에 사용할 수 있게 된다.
3. 3. 2. 메모리 관리
C#에서 관리되는 메모리는 명시적으로 해제할 수 없으며, 대신 자동으로 가비지 컬렉션된다. 가비지 컬렉션은 프로그래머가 더 이상 필요하지 않은 메모리를 해제해야 하는 책임을 제거하여 메모리 누수 문제를 해결한다. 객체에 대한 참조를 필요 이상으로 오래 유지하는 코드는 여전히 필요 이상의 메모리 사용량을 경험할 수 있지만, 객체에 대한 마지막 참조가 해제되면 메모리는 가비지 수집에 사용할 수 있게 된다.[78]C#은 데이터베이스 연결과 같은 언매니지드 리소스에 대해서도 명시적으로 제어하는 방법을 제공한다. 이는 `IDisposable` 인터페이스와 `using` 문 또는 `using` 선언을 통해 이루어진다.[78]
3. 3. 3. 예외 처리
프로그래머는 다양한 표준 예외를 사용할 수 있다. 표준 라이브러리의 메서드는 특정 상황에서 시스템 예외를 정기적으로 발생시키며, 발생되는 예외의 범위는 일반적으로 문서화되어 있다. 필요에 따라 특정 상황에 대한 처리를 할 수 있도록 사용자 지정 예외 클래스를 정의할 수 있다.[79]예외를 처리하는 구문은 다음과 같다:
```csharp
try
{
// something
}
catch (Exception ex)
{
// if error do this
}
finally
{
// always executes, regardless of error occurrence
}
```
`finally` 부분은 생략할 수 있다. 오류 처리가 필요하지 않은 경우, `(Exception ex)` 매개변수도 생략할 수 있다. 또한, 여러 종류의 예외를 처리하는 여러 개의 `catch` 부분이 있을 수 있다.[80]
확인된 예외는 C#에 존재하지 않는다(Java와 대조적으로). 이는 확장성과 버전 관리 문제에 대한 의식적인 결정이었다.[81]
C# 7.0 이후에는 `catch` 구문 다음에 `when` 키워드를 사용하여 처리할 예외를 제한할 수 있게 되었다.
```csharp
try {
// ...
}
catch (AggregateException ex) when (ex.InnerException is ArgumentException) {
// ...
}
3. 3. 4. 네임스페이스
C#의 `namespace`는 자바의 `package` 또는 C++의 `namespace`와 동일한 수준의 코드 격리를 제공하며, `package`와 매우 유사한 규칙과 기능을 갖는다.[77] 네임스페이스는 "using" 구문을 사용하여 가져올 수 있다.[77]- 네임스페이스는 계층 구조를 가진다. 즉, 네임스페이스는 다른 네임스페이스 안에 선언할 수 있다.
- 모든 필드와 메서드는 클래스 또는 구조체의 일부로 선언되어야 한다.
- 예를 들어 C/C++의 `printf()` 함수와 같이 네임스페이스 레벨에 존재하는 프리 함수를 정의할 수 없다. 대부분의 경우 클래스 및 구조체는 이름 충돌을 피하기 위해 네임스페이스에 속한다.
정적 using 지시문을 사용하면 형식 이름을 지정하지 않고 다른 클래스의 정적 멤버를 호출할 수 있다. 사용하려면 `using static` 뒤에 완전한 정규화된 클래스 이름을 지정한다.
```csharp
using static System.Math;
// ↑ 소스 코드 상단에서 선언
class Hogehoge {
// System.Math.Pow() , System.Math.PI를 수식어 없이 호출
double area = Pow(radius, 2) * PI;
}
3. 3. 5. 프로퍼티
C#은 프로퍼티를 지원하는 클래스를 제공한다. 프로퍼티는 접근자 함수(getter)와 변경자 함수(setter)를 통해 값을 읽고 쓰는 기능을 캡슐화한다. 프로퍼티는 지원 필드를 가질 수도 있고, getter와 setter 함수를 직접 구현할 수도 있다. setter가 없으면 프로퍼티는 읽기 전용이 된다. 클래스와 인스턴스 프로퍼티는 필드처럼 존재할 수 있으며, 기본 메서드는 다른 메서드처럼 `virtual` 또는 `abstract` 키워드를 사용하여 정의할 수 있다.[73]C# 3.0부터는 자동 구현 프로퍼티라는 구문 설탕을 사용할 수 있다.[76] 자동 구현 프로퍼티는 접근자(getter)와 변경자(setter)를 통해 클래스의 속성에 대한 연산을 캡슐화한다. 예를 들어 `get; set;`을 속성 정의에 작성하면, 속성 값을 저장하기 위한 익명 필드(프로그래머가 직접 접근 불가능)와 해당 필드에 접근하는 접근자가 암묵적으로 정의된다.
```csharp
public int Value { get; set; }
```
위 코드는 아래 코드와 동일하게 동작한다.
```csharp
private int __value;
public int Value
{
get { return __value; }
set { __value = value; }
}
```
위 예시에서 익명 필드는 `__value`로 이름 붙여졌지만, 실제로는 프로그래머가 이 필드에 접근할 수 없다. C# 6.0부터는 `get;`만 사용하여 읽기 전용 자동 구현 프로퍼티를 정의할 수 있게 되었다. (C# 5.0까지는 `get;`과 `set;` 중 하나만 사용하는 것은 불가능했다.)
프로퍼티의 `get` 또는 `set` 접근자에 접근 제한자를 지정하여 접근 제어를 개별적으로 설정할 수도 있다. 예를 들어 `get` 접근자는 `public`으로, `set` 접근자는 `private`으로 설정할 수 있다.
```csharp
public class MyClass
{
private string status = string.Empty;
public string Status
{
get { return status; }
private set { status = value; }
}
}
```
C#에서는 액세서를 쉽게 정의하고 사용하기 위해 프로퍼티 구문을 사용한다. C++이나 Java에서는 캡슐화를 위해 getter/setter 접근자에 해당하는 멤버 함수 또는 메서드를 정의하여 사용하지만, C#에서는 속성 기능을 통해 캡슐화를 유지하면서 필드를 직접 읽고 쓰는 것처럼 직관적인 구문으로 객체의 상태에 접근할 수 있다. 이를 통해 멤버 접근 제어 및 데이터 정합성 검사를 실행할 수 있다.
3. 3. 6. 제네릭
제네릭스(총칭 형식)는 C# 2.0부터 도입된 기능으로, .NET Framework 2.0의 기능이다. 클래스, 구조체, 인터페이스, 델리게이트, 메서드에 적용할 수 있다..NET의 제네릭은 C++의 템플릿이나 자바의 제네릭스와는 다르다. 컴파일 시점이 아닌 런타임에서 런타임에 의해 특수화된다. 이를 통해 서로 다른 언어 간의 운용을 가능하게 하고, 리플렉션을 통해 형식 매개변수에 관한 정보를 얻을 수 있다. 또한, `where` 절을 통해 형식 매개변수에 제약을 줄 수 있다. 한편, C++처럼 형식 매개변수로 표현식을 지정할 수는 없다. 제네릭 메서드 호출 시 인수로 형식 매개변수를 추론할 수 있는 경우, 형식 매개변수 지정은 생략할 수 있다.
C# 4.0부터 제네릭의 형식 인수에 `in`, `out` 한정자를 지정하여 제네릭의 공변성 및 반공변성을 지정할 수 있게 되었다.
```csharp
IEnumerable
// IEnumerable
// 따라서 C# 4.0에서는 다음 줄은 컴파일 오류가 발생하지 않는다.
IEnumerable
4. 컴파일러 및 개발 도구
C# 컴파일러는 여러 종류가 있으며, 대표적인 컴파일러는 다음과 같다.
제품명 | 설명 |
---|---|
Microsoft Visual C# | 마이크로소프트가 제공하는 공식 C# 컴파일러이다. C# 표준 정의를 가장 정확하고 안정적으로 반영하며, LINQ 확장과 같은 최신 기술을 테스트하는 도구로도 사용된다.[198] |
Mono Compiler Suite (mcs) | [http://www.mono-project.com/ Mono Project]에서 개발한 컴파일러로, 리눅스를 포함한 다양한 운영 체제에서 닷넷 플랫폼을 사용할 수 있도록 지원한다. |
Shared Source Common Language Infrastructure | 2006년 C# 2.0 당시, 마이크로소프트에서 공개한 공통 언어 기반 (CLI)과 C# 컴파일러 소스 코드이다. |
the C-Sharp code compiler (cscc) | 2012년까지 개발되었던 [http://dotgnu.org/ DotGNU Project]의 Portable.NET에 포함되어 있었다. |
이 외에도 다음과 같은 C# 개발 도구들이 있다.
- Borland(CodeGear) C# Builder: 코드기어 RAD 스튜디오(Codegear RAD Studio) 안에서 Delphi.net과 C#.net 두 가지 언어로 .NET을 지원한다.[198]
- Microsoft Rotor 프로젝트: 마이크로소프트 닷넷 프레임워크 발표 후 수 개월 뒤에 발표된 오픈 소스 프로젝트로, Microsoft 닷넷 플랫폼에 대한 대체 구현을 제공한다.
- DotGNU Project: 모노와 비슷한 시기에 개발을 시작하였지만, 아직 안정적인 버전이 출시되지 않았다. 특유의 Portable .NET 엔진을 사용한다.
4. 1. 마이크로소프트 비주얼 C#
마이크로소프트에서 제공하는 공식 C# 컴파일러는 C#에 대한 모든 표준 정의를 가장 정확하고 안정적으로 반영한다.[198] 최근에는 C# 3.0에 포함될 LINQ 확장과 같은 부분에 대한 기술적인 레퍼런스를 미리 테스트해볼 수 있는 도구로도 자주 쓰인다.[198]마이크로소프트는 오픈 소스 참조 C# 컴파일러와 도구를 개발했다. Roslyn은 중간 언어(IL)로 컴파일된다. RyuJIT[108]는 JIT(Just-in-time) 컴파일러로, 동적이며 즉석에서 최적화를 수행하고 IL을 CPU 프런트 엔드를 위한 네이티브 코드로 컴파일한다.[109] Roslyn은 완전히 관리되는 코드 (C#)로 작성되었으며, API로 기능이 공개되어 개발자가 리팩토링 및 진단 도구를 만들 수 있게 해준다.[9][111] .NET Framework 4.6에서는 새로운 JIT 컴파일러가 이전 컴파일러를 대체했다.[108][113] 공식 구현의 두 가지 분기인 .NET Framework (비공개 소스, Windows 전용)와 .NET Core (오픈 소스, 크로스 플랫폼)는 하나의 오픈 소스 구현인 .NET 5.0으로 통합되었다.[112]
현재 C# 컴파일러 구현은 다음 5가지가 알려져 있다.
제품명 | 설명 |
---|---|
(코드명 Roslyn) | 비주얼 스튜디오(Visual Studio) 2015 이후에 사용. 아파치 라이선스의 오픈 소스 프로젝트로 GitHub에 공개.[185] Windows, macOS, 리눅스에서 동작. C# 컴파일러는 C#으로, VB.NET 컴파일러는 VB.NET으로 구현. 이전 컴파일러에 비해 리팩토링, IDE, 스크립팅 등에 활용할 수 있는 API가 공개되어 컴파일러 외에도 다양한 응용 가능. |
마이크로소프트 Visual C# 컴파일러 | 비주얼 스튜디오(Visual Studio) 2013까지 사용. |
Shared Source Common Language Infrastructure | 2006년 C# 2.0 당시, 마이크로소프트의 [http://www.microsoft.com/downloads/details.aspx?FamilyId=8C09FD61-3F26-4555-AE17-3121B4F51D4D&displaylang=en Shared Source Common Language Infrastructure]. 공통 언어 기반 (CLI)과 C# 컴파일러가 소스 코드로 공개. |
Mono Compiler Suite (mcs) | [http://www.mono-project.com/ Mono Project]에 의한 Mono 내에 포함. |
the C-Sharp code compiler (cscc) | 2012년까지 개발되었던, [http://dotgnu.org/ DotGNU Project]에 의한 Portable.NET 내에 포함. |
4. 2. Mono
Mono는 마이크로소프트 닷넷 플랫폼 구현과 함께 시작된 프로젝트로, 현재 제3자 닷넷 플랫폼 중 가장 안정적이고 성숙하다고 평가받는다.[198] 마이크로소프트 닷넷 플랫폼이 윈도우와 소수의 유닉스 플랫폼을 대상으로 하는 반면, 모노 플랫폼은 리눅스, 유닉스, macOS, 솔라리스 등 윈도우 외 운영 체제를 주 대상으로 한다.[198] 초기에는 지미안이 호스팅했으나 현재는 노벨이 호스팅하고 있다.[198]모노 플랫폼은 GTK#, 모질라 임베딩, IKVM (Java 바이트 코드를 모노 플랫폼에서 실행하는 VM), COCOA#, Nemerle 언어, MonoDevelop IDE 등 다양한 기술을 지원한다.[198] 또한 마이크로소프트 닷넷 플랫폼과 호환되며, 현재 리눅스 배포판에서 공식 채택될 정도로 리눅스 환경에서 대중적인 닷넷 플랫폼 구현으로 자리 잡았다.[198]
[http://www.mono-project.com/ Mono Project]의 Mono에는 Mono Compiler Suite (mcs)가 포함되어 있다.
4. 3. 기타 컴파일러 및 도구
- Borland(CodeGear) C# Builder: 코드기어 RAD 스튜디오(Codegear RAD Studio) 안에서 Delphi.net과 C#.net 두 가지 언어로 .NET을 지원한다.[198]
- Microsoft Rotor 프로젝트: 마이크로소프트 닷넷 프레임워크가 발표된 후 수 개월 후에 발표된 오픈 소스 프로젝트로, Microsoft 닷넷 플랫폼에 대한 대체 구현을 제공한다.
- DotGNU Project: 모노와 비슷한 시기에 개발을 시작하였지만 아직 안정적인 버전이 출시되지 못했다. 특유의 Portable .NET 엔진을 사용하고 있다.
- Elements: RemObjects의 도구 체인으로, C# 코드를 .NET의 공통 중간 언어, 자바 바이트코드, Cocoa, Android 바이트코드, WebAssembly, 그리고 Windows, macOS 및 Linux용 네이티브 머신 코드로 컴파일하는 RemObjects C#을 포함한다.
- 유니티 게임 엔진은 C#을 주요 스크립팅 언어로 사용한다. 고도 게임 엔진은 마이크로소프트로부터 24000USD 기부를 받아 선택적 C# 모듈을 구현했다.[114]
5. C++과의 차이점
- C#에는 전역 변수 및 전역 함수가 존재하지 않으며, 모든 메서드와 멤버는 클래스 안에 선언되어야 한다.[199]
- C#의 `bool`은 `true`와 `false` 값만 가질 수 있으며, 정수형 변수 등에서 암시적 변환이 불가능하다. C++의 `bool`은 정수값을 대입할 수 있으며, `if`나 `while`문 등에서 '0이 아닌 값' 또는 '0' 여부로 비교할 수 있는 반면, C#에서는 `bool` 형태로 제한된다.[199]
- C#에서 `static` 키워드는 한 번만 초기화한다는 의미로 사용될 수 없다.[199]
- C#에서 포인터는 기본적으로 '''unsafe 블록''' 또는 '''unsafe 형식'''에서 사용되며, `unsafe` 키워드를 사용하려면 컴파일러에게 `/unsafe` 또는 `--unsafe` 스위치를 지정해야 한다.[199]
- 닷넷 플랫폼에서 포인터를 다루는 기본 단위는 `System.IntPtr`이다. (`System.UIntPtr`은 특수한 목적).[199]
- C#은 `unsafe` 블록 내에서 `IntPtr.ToPointer` 메서드를 통해 `void*` 형식을 가져오는 직접적인 포인터도 지원한다.[199]
- 메모리 관리자에 의해 관리되는 데이터는 주소값이 자주 변경되므로, 포인터는 참조 형식의 인스턴스를 가리킬 수 없다. 참조 형식의 필드를 멤버로 가진 구조체는 참조 형식으로 처리되므로, 포인터로 주소를 가리킬 수 없다.[199]
- C#의 포인터는 C++과 문법적 의미가 다르다. C++ 포인터는 주소값을 기억하는 변수지만, C# 포인터는 `System.IntPtr` 형식의 확장 사양일 뿐이어서, C++ 포인터와 같은 쓰임새를 C#으로 이식할 수 없는 경우가 많다.[199]
- `void*` 포인터가 가리키는 값을 얻거나 산술 연산을 할 수 없다.[199]
- 산술 연산은 컴파일러 옵션에 따라 `/checked+` 지정 시 엄격한 검사를, `/checked-` 지정 시 검사를 하지 않는다. '''unchecked 블록''' 내에서는 검사되지 않으며, '''checked 블록''' 내에서는 검사된다.[199]
- '''fixed 블록'''을 이용해 힙에 데이터를 고정할 수 있다.[199]
- C#은 메모리 해제 명령이 없으며, 가비지 컬렉터가 자동으로 처리한다. `IDisposable` 인터페이스를 구현한 클래스는 `using` 구문을 통해 `IDisposable.Dispose` 메서드를 자동 호출할 수 있다.[199]
- C#은 다중 상속이 불가능하며, 인터페이스는 여러 개 지정할 수 있다. 이는 복잡성을 줄이고 상속 관계를 명료하게 한다.[199]
- C#은 형 안전성이 C++보다 관대하며, `System.Object`가 모든 클래스의 선조 클래스이기 때문이다. (unsafe 블록 내 포인터 형식 제외).[199]
- 배열과 포인터 정의 문법이 다르다. 배열은 자바와 유사하며, C# 포인터는 `int*`, `void*` 등 완성된 형식으로 이해되지만 C++은 주소값을 저장하는 형태이다. (특수 `GCHandle` 형식 활용 시 예외적 접근 가능).[199]
- C# 열거형은 자체 형식이며, 정의된 상수는 멤버 상수가 된다. C++ 열거형은 상수들이 전역적으로 쓰이는 것에 초점을 둔다.[199]
- 형식 다형성 제약 극복, 형식 안정성 향상을 위해 2.0부터 제네릭 형식이 도입되었다. C++ 템플릿과 유사하나, C# 제네릭 형식은 IL 메타데이터 상에 정보가 남는다.[199]
- 데이터 멤버를 다루는 구문에 의해 메서드가 호출되는 프로퍼티(getter, setter) 기능이 있다. C#은 getter, setter를 함께 사용하는 고정 문법을 사용하며, 비주얼 베이직 닷넷과 유사하나, 다른 언어들은 `get_foo()`, `set_foo()` 메서드로 구분한다.[199]
- C++의 컴파일러 제작사마다 다른 런타임 형식 정보 구현 방식은 C#에서 리플렉션으로 확장 사용 가능하다. 리플렉션은 자바와 같다.[199]
- C#은 C/C++과 달리 전처리기 사용이 제한적이다. #include, #pragma 사용 불가, #define 용도 제한, #region, #endregion 지시자 추가.[199]
- C#은 인라인 함수, 전역 함수, 전역 변수가 허용되지 않으며, 모든 인스턴스, 메서드는 클래스 멤버로 소속되어야 한다.[199]
- C#은 프렌드 함수를 지원하지 않으며, C# 3.0부터 확장 메서드를 지원한다. 확장 메서드는 정적 클래스 멤버여야 하며, 대상 클래스의 private 멤버에 접근 불가.[199]
- C# 3.0부터 임의 자료형인 `var` 타입을 지원하며, 실제 형식은 컴파일 시 결정된다. (C++11에서 `auto` 키워드로 지원).[199]
- C# 3.0부터 SQL 구문을 활용한 LINQ 식을 지원한다.[199]
- C++의 함수 포인터 대신 C#은 델리게이트, 무명 메서드를 지원한다.[199]
6. 표준화 및 라이선스
마이크로소프트(Microsoft), 휴렛 팩커드(Hewlett-Packard), 인텔(Intel)은 2001년 8월 C# 및 공통 언어 인프라(CLI) 사양을 ECMA 인터내셔널에 공동 제출했다.[103] 그해 12월, ECMA는 ECMA-334 ''C# 언어 사양''을 발표했고, 2003년에는 ISO/IEC 표준(ISO/IEC 23270:2003)이 되었다.[103] ECMA는 2002년 12월에 C# 2판, 2005년 6월에는 부분 클래스, 익명 메서드, 널 가능 형식, 제네릭스 등이 추가된 C# 3판을 승인했다.[103] 2005년 7월, ECMA는 해당 표준 및 관련 TR을 ISO/IEC JTC 1/SC 22에 제출했다.[103]
C# 언어 정의와 CLI는 ISO/IEC 및 ECMA 표준에 따라 표준화되어 특허 청구로부터 합리적이고 비차별적인 라이선스 보호를 받는다.
마이크로소프트는 오픈 스펙 프로미스에 따라 보호되는 프레임워크 부분에 대해 비영리 프로젝트에서 특허 침해로 오픈 소스 개발자를 고소하지 않기로 합의했다.[103] 또한 노벨의 유료 고객을 상대로 노벨 제품 관련 특허를 시행하지 않기로 합의했으나, 여기에는 C#, .NET 또는 노벨의 .NET 구현(모노 프로젝트)을 명시적으로 언급하지 않는 제품은 제외되었다.[104][105] 다만, 노벨은 모노가 마이크로소프트의 어떠한 특허도 침해하지 않는다고 주장했다.[106] 마이크로소프트는 노벨을 통해 획득한 경우 모노에 의존하는 문라이트 브라우저 플러그인 관련 특허권을 시행하지 않겠다는 별도 합의도 맺었다.[107]
이후 마이크로소프트는 C#을 위한 무료, 오픈 소스, 크로스 플랫폼 도구인 비주얼 스튜디오 코드(Visual Studio Code), .NET 코어(.NET Core), 로슬린(Roslyn)을 개발하기 시작했다. 모노는 마이크로소프트 자회사인 Xamarin의 프로젝트로 마이크로소프트에 합류했다. C# 언어 사양은 표준화 단체 Ecma International을 통해 공개 및 표준화되어, 제3자가 마이크로소프트와 관계없이 컴파일러 및 실행 환경을 구현할 수 있다.[184]
7. 예제
C# 9.0 이상 버전에서는 "Hello, world!" 프로그램을 다음과 같이 간단하게 작성할 수 있다.[100]
```csharp
using System;
Console.WriteLine("Hello, world!");
```
C# 8 이하 버전에서는 프로그램의 진입점인 `Main` 메서드를 포함해야 한다.
```csharp
using System;
class Program
{
static void Main()
{
Console.WriteLine("Hello, world!");
}
}
```
위 코드는 콘솔 창에 "Hello, world!"를 출력한다.
.NET의 제네릭(Generics) 기능을 사용하면 형식 안전한 데이터 구조를 만들 수 있다. 레거시 시스템을 제네릭으로 업데이트하면 구식 데이터 구조를 더 효율적이고 형식 안전한 구조로 바꿀 수 있어 성능과 유지 관리성이 향상된다.[102]
7. 1. 헬로 월드 프로그램
C# 9.0 이상 버전에서는 다음과 같이 "Hello, world!" 프로그램을 작성할 수 있다.[100]```csharp
using System;
Console.WriteLine("Hello, world!");
```
C# 8 이하 버전에서는 프로그램의 진입점인 `Main` 메서드를 포함해야 한다.
```csharp
using System;
class Program
{
static void Main()
{
Console.WriteLine("Hello, world!");
}
}
```
위 코드는 콘솔 창에 "Hello, world!"를 출력한다.
각 코드 라인은 다음과 같은 의미를 갖는다.
- `using System;`: `System` 네임스페이스를 가져온다. `System` 네임스페이스 안의 `Console` 클래스를 사용하기 위함이다.
- `class Program`: `Program` 클래스를 정의한다.
- `static void Main()`: 프로그램 실행 시작점인 `Main` 메서드를 선언한다.
- Java와 달리 `public` 키워드는 필요하지 않다.[101]
- `static` 키워드는 `Program` 클래스의 인스턴스 없이도 메서드를 호출할 수 있게 한다.
- `void` 키워드는 `Main` 메서드가 반환 값이 없음을 의미한다.
- `Console.WriteLine("Hello, world!");`: `Console` 클래스의 `WriteLine` 메서드를 호출하여 콘솔에 "Hello, world!" 문자열을 출력한다. `Console`은 `System` 네임스페이스에 정의된 정적 클래스로, 콘솔 애플리케이션의 표준 입출력을 담당한다.
C# 최신 버전에서는 다음과 같이 더 간단하게 작성할 수도 있다.[154]
```csharp
Console.WriteLine("Hello World!");
```
위 코드는 컴파일러에 의해 다음과 같이 해석된다.
```csharp
using System;
namespace Wikipedia
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
```
이는 다음 기능들 덕분이다. (구 버전 컴파일러에서는 지원되지 않을 수 있다.)
7. 2. 제네릭
.NET의 새로운 기능인 제네릭(Generics)은 개발자가 형식 안전한 데이터 구조를 만들 수 있게 해준다. 특히 레거시 시스템을 변환할 때 제네릭으로 업데이트하면 구식 데이터 구조를 더 효율적이고 형식 안전한 대안으로 바꿀 수 있어 성능과 유지 관리성이 크게 향상된다.[102]'''예시'''
```csharp
public class DataStore
{
private T[] items = new T[10];
private int count = 0;
public void Add(T item)
{
items[count++] = item;
}
public T Get(int index)
{
return items[index];
}
}
참조
[1]
웹사이트
InfoQ eMag: A Preview of C# 7
https://www.infoq.co[...]
2016-11-11
[2]
웹사이트
Chapel spec (Acknowledgments)
http://chapel.cray.c[...]
Cray Inc
2016-01-14
[3]
웹사이트
Rich Hickey Q&A by Michael Fogus
http://www.codequart[...]
2017-01-11
[4]
웹사이트
Crystal 0.18.0 released!
http://crystal-lang.[...]
2017-08-07
[5]
웹사이트
Web Languages and VMs: Fast Code is Always in Fashion. (V8, Dart) - Google I/O 2013
https://www.youtube.[...]
2013-12-22
[6]
웹사이트
Java 5.0 added several new language features (the [[foreach loop enhanced for loop , [[Object type (object-oriented programming) Autoboxing , [[variadic function varargs and [[Java annotation annotations , after they were introduced in the similar (and competing) C# language [http://www.barrycornelius.com/papers/java5/] {{Webarchive|url=https://web.archive.org/web/20110319065438/http://www.barrycornelius.com/papers/java5/ |date=March 19, 2011 [http://www.levenez.com/lang/] {{Webarchive|url=https://web.archive.org/web/20060107162045/http://www.levenez.com/lang/ |date=January 7, 2006
[7]
웹사이트
Influences - The Rust Reference
https://doc.rust-lan[...]
2023-04-18
[8]
웹사이트
Chris Lattner's Homepage
http://nondot.org/sa[...]
Chris Lattner
2020-05-12
[9]
웹사이트
The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.: dotnet/roslyn
https://github.com/d[...]
2015-02-13
[10]
웹사이트
CoreCLR is the runtime for .NET Core. It includes the garbage collector, JIT compiler, primitive data types and low-level classes.: dotnet/coreclr
https://github.com/d[...]
2017-03-08
[11]
웹사이트
Announcing C# 12
https://devblogs.mic[...]
2023-11-18
[12]
웹사이트
Announcing .NET 8
https://devblogs.mic[...]
2023-11-18
[13]
서적
C# Language Specification
https://www.ecma-int[...]
Ecma International
2012-01-26
[14]
웹사이트
Design Goals of C#
https://www.java-sam[...]
2021-10-06
[15]
웹사이트
Couple of Historical Facts
http://msdn.microsof[...]
2009-02-23
[16]
웹사이트
What language was ASP.Net originally written in?
http://aspadvice.com[...]
2008-02-21
[17]
간행물
The A-Z of Programming Languages: C#
https://www.computer[...]
2008-10-01
[18]
웹사이트
Details
http://nilsnaegele.c[...]
2019-04-07
[19]
웹사이트
Why Microsoft's C# isn't
https://www.cnet.com[...]
CNET: CBS Interactive
2023-09-18
[20]
웹사이트
Microsoft's blind spot
https://www.cnet.com[...]
cnet.com
2023-09-18
[21]
뉴스
Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg
http://windowsdevcen[...]
O'Reilly Media
2009-11-14
[22]
웹사이트
Generics (C# Programming Guide)
http://msdn.microsof[...]
Microsoft
2011-03-21
[23]
웹사이트
LINQ: .NET Language-Integrated Query
http://msdn.microsof[...]
Microsoft
2011-03-21
[24]
웹사이트
Why functional programming and LINQ is often better than procedural code
http://blog.abodit.c[...]
abodit.com
2011-03-21
[25]
웹사이트
Andy Retires
http://blogs.msdn.co[...]
Blogs.msdn.com
2012-10-04
[26]
웹사이트
Technical committees - JTC 1/SC 22 - Programming languages, their environments and system software interfaces
http://www.iso.org/i[...]
ISO
2012-10-04
[27]
웹사이트
ISO/IEC 23270:2003 - Information technology - C# Language Specification
http://www.iso.org/i[...]
Iso.org
2012-10-04
[28]
웹사이트
ISO/IEC 23270:2006 - Information technology - Programming languages - C#
http://www.iso.org/i[...]
Iso.org
2012-10-04
[29]
웹사이트
SO/IEC 23270:2018 Information technology — Programming languages — C#
https://www.iso.org/[...]
2020-11-26
[30]
웹사이트
My History of Visual Studio (Part 1) – Rico Mariani's Performance Tidbits
https://blogs.msdn.m[...]
2018-05-26
[31]
웹사이트
C#/.NET History Lesson
http://www.jameskova[...]
2009-06-18
[32]
간행물
The A-Z of Programming Languages: C#
http://www.computerw[...]
2014-06-22
[33]
웹사이트
Microsoft C# FAQ
http://msdn.microsof[...]
Microsoft
2008-03-25
[34]
웹사이트
F# FAQ
http://research.micr[...]
Microsoft Research
2009-06-18
[35]
웹사이트
Full Eiffel on the .NET Framework
http://msdn.microsof[...]
Microsoft
2009-06-18
[36]
웹사이트
What's new in the C# 2.0 Language and Compiler
http://msdn.microsof[...]
Microsoft
2014-06-11
[37]
웹사이트
Overview of C# 3.0
http://msdn.microsof[...]
Microsoft
2014-06-11
[38]
웹사이트
Using C# 3.0 from .NET 2.0
http://www.danielmot[...]
Danielmoth.com
2012-10-04
[39]
웹사이트
Future directions for C# and Visual Basic
https://web.archive.[...]
Microsoft
2011-09-21
[40]
웹사이트
An Introduction to New Features in C# 5.0
https://web.archive.[...]
Microsoft
2014-06-11
[41]
웹사이트
Languages features in C# 6 and VB 14
https://web.archive.[...]
dotnet/roslyn
2015-02-13
[42]
웹사이트
What's new in C# 7
https://docs.microso[...]
2016-12-21
[43]
웹사이트
New Features in C# 7.0
https://blogs.msdn.m[...]
Microsoft
2017-06-09
[44]
웹사이트
Visual Studio 2017 version 15.0 Release Notes
https://learn.micros[...]
2023-04-19
[45]
웹사이트
What's new in C# 7.1
https://docs.microso[...]
2017-10-09
[46]
웹사이트
Visual Studio 2017 version 15.3 Release Notes
https://docs.microso[...]
2023-04-19
[47]
웹사이트
What's new in C# 7.2
https://docs.microso[...]
2017-11-26
[48]
웹사이트
Visual Studio 2017 version 15.5 Release Notes
https://learn.micros[...]
2023-04-19
[49]
웹사이트
What's new in C# 7.3
https://docs.microso[...]
2018-06-23
[50]
웹사이트
Visual Studio 2017 version 15.7 Release Notes
https://learn.micros[...]
2023-04-19
[51]
웹사이트
What's new in C# 8.0
https://docs.microso[...]
2019-04-14
[52]
웹사이트
Visual Studio 2019 version 16.3 Release Notes
https://learn.micros[...]
2023-04-19
[53]
웹사이트
What's new in C# 9.0 - C# Guide
https://docs.microso[...]
2020-10-15
[54]
웹사이트
Visual Studio 2019 version 16.8 Release Notes
https://learn.micros[...]
2023-04-19
[55]
웹사이트
What's new in C# 10
https://docs.microso[...]
2021-11-10
[56]
웹사이트
Visual Studio 2022 version 17.0 Release Notes
https://learn.micros[...]
2023-04-19
[57]
웹사이트
What's new in C# 11
https://docs.microso[...]
2022-08-08
[58]
웹사이트
Visual Studio 2022 version 17.4 Release Notes
https://learn.micros[...]
2023-04-19
[59]
웹사이트
What's new in C# 12
https://learn.micros[...]
2023-06-29
[60]
웹사이트
Visual Studio 2022 version 17.8 Release Notes
https://learn.micros[...]
2024-11-18
[61]
웹사이트
What's new in C# 13
https://learn.micros[...]
2024-11-18
[62]
웹사이트
Visual Studio 2022 Release Notes
https://learn.micros[...]
2024-11-18
[63]
웹사이트
Compiling Apps with .NET Native - UWP applications
https://learn.micros[...]
2023-10-27
[64]
웹사이트
Native AOT deployment overview - .NET
https://learn.micros[...]
2023-10-27
[65]
웹사이트
Types/General, part of the official C# documentation
https://learn.micros[...]
Microsoft
2024-04-06
[66]
웹사이트
Expression Trees (C#)
https://docs.microso[...]
2021-05-14
[67]
웹사이트
System.Reflection.Emit Namespace
https://learn.micros[...]
2023-04-28
[68]
웹사이트
Microsoft's Roslyn: Reinventing the compiler as we know it
https://www.infoworl[...]
2022-03-05
[69]
웹사이트
Introducing C# Source Generators
https://devblogs.mic[...]
2021-05-14
[70]
웹사이트
Classes/fields, part of the official C# documentation
https://learn.micros[...]
2024-02-07
[71]
웹사이트
out (C# Reference)
https://learn.micros[...]
2024-03-30
[72]
웹사이트
Method parameters/params modifier, part of the official C# documentation
https://learn.micros[...]
2024-05-21
[73]
웹사이트
Classes/properties, part of the official C# documentation
https://learn.micros[...]
2024-02-07
[74]
웹사이트
virtual (C# Reference)
https://docs.microso[...]
2021-09-15
[75]
웹사이트
'''new''' modifier, part of the official C# documentation
https://learn.micros[...]
2023-04-12
[76]
웹사이트
Auto-Implemented Properties (C# Programming Guide)
https://docs.microso[...]
2020-09-12
[77]
웹사이트
using directive - C# Reference
https://docs.microso[...]
2019-04-14
[78]
웹사이트
Unsafe code, pointers to data, and function pointers
https://docs.microso[...]
2021-06-20
[79]
웹사이트
How to create user-defined exceptions
https://docs.microso[...]
2020-09-12
[80]
웹사이트
Exception-handling statements, part of the official C# documentation
https://learn.micros[...]
2023-04-22
[81]
웹사이트
The Trouble with Checked Exceptions
http://www.artima.co[...]
2003-08-18
[82]
웹사이트
Operator overloading - C# reference
https://docs.microso[...]
2021-06-20
[83]
웹사이트
Expressions/Overload resolution, part of the official C# documentation
https://learn.micros[...]
2024-02-07
[84]
웹사이트
Types/Constructed Types, part of the official C# documentation
https://learn.micros[...]
2024-04-07
[85]
웹사이트
Classes/Type Parameter constraints, part of the official C# documentation
https://learn.micros[...]
2024-02-07
[86]
간행물
Research of the Database Access Technology Under.NET Framework
2014-09
[87]
간행물
LINQ to the Future
2006-02
[88]
간행물
New Features in LINQ
2010-11
[89]
웹사이트
Query Syntax and Method Syntax in LINQ (C#)
https://learn.micros[...]
2021-09-15
[90]
웹사이트
The history of C# - C# Guide
https://learn.micros[...]
2023-03-09
[91]
Youtube
The functional journey of C# - Mads Torgersen - NDC Copenhagen 2022
https://www.youtube.[...]
2022-08-17
[92]
웹사이트
The Beauty of Closures
https://csharpindept[...]
2023-04-28
[93]
웹사이트
Anonymous functions - C# Programming Guide
https://docs.microso[...]
2021-05-15
[94]
웹사이트
What's New in C# 7.0
https://docs.microso[...]
2019-04-14
[95]
웹사이트
C# 9.0 on the record
https://devblogs.mic[...]
2020-11-10
[96]
웹사이트
init keyword - C# Reference
https://learn.micros[...]
2022-06-30
[97]
웹사이트
The .NET Compiler Platform
https://github.com/d[...]
.NET Platform
2023-04-28
[98]
웹사이트
Representation and Identity
http://blogs.msdn.co[...]
Blogs.msdn.com
2009-03-19
[99]
웹사이트
Framework Libraries
https://docs.microso[...]
2023-04-19
[100]
웹사이트
What's new in C# 9.0 - C# Guide
https://docs.microso[...]
2021-05-14
[101]
웹사이트
Main() and command-line arguments
https://docs.microso[...]
2021-08-05
[102]
웹사이트
Unlocking the Power of C# Generics: A Comprehensive Guide
https://wirefuture.c[...]
2024-04-24
[103]
웹사이트
Patent Pledge for Open Source Developers
https://msdn.microso[...]
2023-03-16
[104]
웹사이트
Patent Cooperation Agreement - Microsoft & Novell Interoperability Collaboration
http://www.microsoft[...]
Microsoft
2006-11-02
[105]
웹사이트
Definitions
http://www.microsoft[...]
Microsoft
2006-11-02
[106]
웹사이트
Novell Answers Questions from the Community
http://www.novell.co[...]
2009-07-05
[107]
웹사이트
Covenant to Downstream Recipients of Moonlight - Microsoft & Novell Interoperability Collaboration
http://www.microsoft[...]
Microsoft
2008-03-08
[108]
웹사이트
The RyuJIT transition is complete!
https://devblogs.mic[...]
2021-07-20
[109]
웹사이트
Managed Execution Process
https://docs.microso[...]
2021-07-20
[110]
웹사이트
coreclr/src/jit/
https://github.com/d[...]
2021-07-20
[111]
웹사이트
C# Guide
https://docs.microso[...]
2017-07-28
[112]
웹사이트
5.0.8
https://dotnet.micro[...]
2021-07-20
[113]
웹사이트
Mitigation: New 64-bit JIT Compiler
https://docs.microso[...]
2021-07-20
[114]
뉴스
Introducing C# in Godot
https://godotengine.[...]
2017-10-21
[115]
웹사이트
誰でもC#とCLIの正式な実装が可能に
https://www.infoq.co[...]
2019-12-02
[116]
웹사이트
Visual Basic 言語の戦略 - Visual Basic
https://learn.micros[...]
Microsoft
2023-12-23
[117]
웹사이트
Visual Studio Code 用の C# 開発キット - Visual Studio Subscription
https://learn.micros[...]
Microsoft
2023-12-23
[118]
웹사이트
Standard ECMA-334
https://ecma-interna[...]
ECMA
2023-12-23
[119]
웹사이트
Standard ECMA-334-archive
http://www.ecma-inte[...]
2018-11-13
[120]
웹사이트
C# 1.0 - C# によるプログラミング入門
https://ufcpp.net/st[...]
2021-01-23
[121]
웹사이트
C# 2.0 の新機能 - C# によるプログラミング入門
https://ufcpp.net/st[...]
2021-01-23
[122]
웹사이트
Using C# 3.0 from .NET 2.0
http://www.danielmot[...]
Danielmoth.com
2012-10-04
[123]
웹사이트
C# 4.0 の新機能 - C# によるプログラミング入門
https://ufcpp.net/st[...]
2021-01-23
[124]
웹사이트
C# 5.0 の新機能 - C# によるプログラミング入門
https://ufcpp.net/st[...]
2021-01-23
[125]
뉴스
Microsoft、「.NET Framework 4.6」を正式公開
https://forest.watch[...]
2021-01-23
[126]
뉴스
.NET Framework 4.7が一般公開される
https://www.infoq.co[...]
2021-01-23
[127]
웹사이트
Visual Studio 2017 バージョン 15.0 リリース ノート
https://docs.microso[...]
2021-01-23
[128]
웹사이트
Visual Studio 2017 15.3 Release Notes
https://docs.microso[...]
2018-11-12
[129]
웹사이트
Visual Studio 2017 15.5 Release Notes
https://docs.microso[...]
2018-11-12
[130]
웹사이트
C# 7.3 の新機能 - C# によるプログラミング入門
https://ufcpp.net/st[...]
2021-01-23
[131]
웹사이트
Visual Studio 2017 15.7 Release Notes
https://docs.microso[...]
2018-08-24
[132]
뉴스
Micorsoftが.NET Core 3.0をリリース
https://www.infoq.co[...]
2021-01-23
[133]
웹사이트
Visual Studio 2019 Release Notes
https://docs.microso[...]
2019-09-30
[134]
웹사이트
Announcing .NET 5.0
https://devblogs.mic[...]
Microsoft
2020-11-11
[135]
웹사이트
Visual Studio 2019 Release Notes
https://docs.microso[...]
2020-11-10
[136]
웹사이트
What's new in C# 10
https://docs.microso[...]
2022-06-28
[137]
웹사이트
Visual Studio 2022 version 17.0 Release Notes
https://docs.microso[...]
2022-06-28
[138]
웹사이트
C# 11 の新機能
https://learn.micros[...]
2023-08-15
[139]
웹사이트
C# 11.0 の新機能 - C# によるプログラミング入門
https://ufcpp.net/st[...]
2023-08-15
[140]
웹사이트
".NET 7 is Available Today"
https://devblogs.mic[...]
2023-08-15
[141]
웹사이트
Visual Studio 2022 バージョン 17.4 リリース ノート
https://learn.micros[...]
2023-08-15
[142]
웹사이트
C# 12 の新機能
https://learn.micros[...]
2023-12-19
[143]
웹사이트
Announcing C# 12
https://devblogs.mic[...]
Microsoft
2024-11-30
[144]
웹사이트
C# 12.0 の新機能 - C# によるプログラミング入門
https://ufcpp.net/st[...]
2023-12-19
[145]
웹사이트
Announcing .NET 8
https://devblogs.mic[...]
2023-12-19
[146]
웹사이트
Visual Studio 2022 バージョン 17.8 リリース ノート
https://learn.micros[...]
2023-12-19
[147]
웹사이트
C# 13 の新機能
https://learn.micros[...]
2024-11-30
[148]
웹사이트
C# 13.0 の新機能 - C# によるプログラミング入門
https://ufcpp.net/st[...]
2024-11-30
[149]
웹사이트
Announcing .NET 9
https://devblogs.mic[...]
2024-11-30
[150]
웹사이트
Visual Studio 2022 バージョン 17.12 リリース ノート
https://learn.micros[...]
2024-11-30
[151]
웹사이트
Native AOT deployment overview - .NET | Microsoft Learn
https://learn.micros[...]
Microsoft
2023-12-23
[152]
웹사이트
IL2CPP の概要 - Unity マニュアル
https://docs.unity3d[...]
Unity
2023-12-23
[153]
웹사이트
Burst の概要 | Burst | 1.8.2
https://docs.unity3d[...]
Unity
2023-12-23
[154]
웹사이트
Hello World - C# の概要に関する対話型チュートリアル | Microsoft Learn
https://learn.micros[...]
Microsoft
2023-12-23
[155]
웹사이트
チュートリアル: 学習しながらコードをビルドするために最上位レベルのステートメントを使用してアイデアを探索する
https://learn.micros[...]
Microsoft
2024-11-30
[156]
웹사이트
.NET プロジェクト SDK
https://learn.micros[...]
Microsoft
2024-11-30
[157]
웹사이트
パターン マッチング - C# によるプログラミング入門
https://ufcpp.net/st[...]
"++C++; // 未確認飛行 C"
2023-12-23
[158]
웹사이트
2-2 変数と定数
https://docs.microso[...]
2018-11-11
[159]
웹사이트
.NET での文字エンコード
https://docs.microso[...]
2018-11-11
[160]
웹사이트
C# 9.0 の新機能 - C# によるプログラミング入門
https://ufcpp.net/st[...]
"++C++; // 未確認飛行 C"
2023-12-23
[161]
웹사이트
組み込みの参照型 - C# リファレンス - C# | Microsoft Learn
https://learn.micros[...]
Microsoft
2023-12-23
[162]
웹사이트
C# の歴史
https://docs.microso[...]
2019-12-12
[163]
웹사이트
null 許容型のボックス化 (C# プログラミング ガイド)
https://www.microsof[...]
Microsoft
2008-06-02
[164]
웹사이트
拡張メソッド (C# プログラミング ガイド)
https://docs.microso[...]
2018-11-10
[165]
웹사이트
C# 6 の新機能
https://docs.microso[...]
2019-12-12
[166]
웹사이트
C# 7.0 の新機能
https://docs.microso[...]
2019-12-12
[167]
웹사이트
switch (C# リファレンス)
https://docs.microso[...]
2017-09-10
[168]
웹사이트
C# 7.1 の新機能
https://docs.microso[...]
2019-12-12
[169]
웹사이트
C# 7.2 の新機能
https://docs.microso[...]
2019-12-12
[170]
웹사이트
Welcome to C# 7.2 and Span
https://blogs.msdn.m[...]
Microsoft
2017-11-23
[171]
웹사이트
C# 7.3 の新機能
https://docs.microso[...]
2019-12-12
[172]
웹사이트
C# 8.0 の新機能
https://docs.microso[...]
2019-12-12
[173]
웹사이트
MicrosoftがC# 8.0をリリース
https://www.infoq.co[...]
2019-12-12
[174]
웹사이트
What's new in C# 9.0
https://docs.microso[...]
2021-10-17
[175]
웹사이트
What's new in C# 10.0
https://docs.microso[...]
2022-11-03
[176]
웹사이트
リスト パターン
https://learn.micros[...]
2023-08-15
[177]
웹사이트
リスト パターン
https://ufcpp.net/st[...]
2023-08-15
[178]
웹사이트
ジェネリック型数値演算
https://learn.micros[...]
2024-05-30
[179]
웹사이트
【Generic Math】 C# 11 での演算子の新機能
https://ufcpp.net/st[...]
2024-05-30
[180]
웹사이트
静的抽象および仮想メンバー
https://learn.micros[...]
2024-05-30
[181]
웹사이트
チュートリアル: C# 11 の機能を調べる - インターフェイスの静的仮想メンバー
https://learn.micros[...]
2024-05-30
[182]
웹사이트
IAdditionOperators
[183]
웹사이트
runtime/src/libraries/System.Private.CoreLib/src/System/Numerics/IAdditionOperators.cs at 69dc5ec395749dc17434140881eb1414fc989c28 · dotnet/runtime
https://github.com/d[...]
Microsoft
2022-08-18
[184]
웹사이트
Javaと.NETの特許問題への短い紹介
https://www.infoq.co[...]
2010-10-04
[185]
웹사이트
dotnet/roslyn: The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.
https://github.com/d[...]
Microsoft
2022-11-29
[186]
웹사이트
ゲームプログラムのC#8.0/.NET対応とその未来
https://www.docswell[...]
CAPCOM
null
[187]
문서
Standard ECMA-334 C# Language Specification
http://www.ecma-inte[...]
[188]
문서
The A-Z of programming languages: F# | Network World
https://www.networkw[...]
[189]
문서
レポート:コミュニティスペシャルセッション with Anders Hejlsberg in Microsoft Developers Conference 2006
https://atmarkit.itm[...]
[190]
문서
C#への期待。アンダースからの返答
http://www.microsoft[...]
[191]
문서
비주얼 스튜디오 커뮤니티 사이트
https://www.visualst[...]
[192]
문서
Create-a-Program-in-C-Sharp
http://www.wikihow.c[...]
[193]
웹인용
Unsafe Code Tutorial (C#)
http://msdn.microsof[...]
2005-11-04
[194]
웹인용
Couple of Historical Facts
http://blogs.msdn.co[...]
2008-11-24
[195]
서적
C# Language Specification
http://www.ecma-inte[...]
Ecma International
2006-06
[196]
문서
C# 3.0, 4.0은 ECMA나 ISO/IEC 사양이 존재하지 않는다.
[197]
웹인용
Using C# 3.0 from .NET 2.0
http://www.danielmot[...]
Danielmoth.com
2007-05-13
[198]
문서
애초에 C# 개발자가 마이크로소프트 이기에 당연히 컴파일러가 가장 정확할수밖에 없다.
[199]
문서
MSDN Magazine
http://www.microsoft[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com