C#
読み:スィーシャープ
外語:C#
C++
をベースとした、独自の
プログラミング言語
の一つ。
目次
言語概要
名称
仕様
バージョン
C/C++との差異
C# 2.0からの新機能
C# 3.0からの新機能
C# 4.0からの新機能
C# 5.0からの新機能
C# 6.0からの新機能
特徴
Javaの対抗
Javaとの差
無節操
国際標準化
言語概要
枠組み ‐
手続き型
、命令型、
オブジェクト指向
発表日 ‐ 2000(平成12)年6月26日
設計者 ‐ アンダース・ヘルスバーグ(Anders Hejlsberg)
開発者 ‐
Microsoft
最新版 ‐ C# 6.0
言語影響関係
被影響 ‐
C++
、
Java
、
Delphi
加影響 ‐ D、Java
主要動作環境 ‐ Microsoft Windows
名称
C++は、Cに++(
インクリメント
)することで、Cより一歩進んだCを意味した。
C#は、この+を縦に並べたものであるが、音符のシャープは「半音上げる」意味があり、やはり++と同様に一歩進んだ状態を表わしている。
なお、公式には、♯(U+266F)ではなく、#(U+0023)が使われている。
仕様
バージョン
次のように分類される。
C# 1.0
C# 1.5
C# 2.0
C# 3.0
C# 4.0
C# 5.0
C# 6.0
ISO規格は次のものがある。
ISO/IEC 23270 (JIS X 3015)
C/C++との差異
C/C++
に似ているが互換性はなく、Delphiを取り込んでいることから機能面や構文はDelphiやJavaに近い。
グローバル変数
やグローバルメソッドが無い
メソッド
や
変数
などは、必ず何らかのクラスに属する必要がある。
外のブロックで定義された変数名を、内のブロックで定義できない C/C++では可能で、別の変数として動作するが、
バグ
の原因にもなっていた。
bool型があるが、整数型と非可換である C++にも
bool
はあるが、整数型と可換である。C#はこの動作を禁止した。
if
文などに記述する条件式は、bool型である必要がある。
クラスの多重継承は無い
Java
と同様のコンセプトである。
名前空間
に階層構造がある
C# 2.0からの新機能
ジェネリクス(Generics)
匿名メソッド
イテレーター
のyield
部分型(Partial Type)
Nullable型 (int?型のような構文糖も用意される)
プロパティ/アクセサーのアクセスレベル
静的クラス(static class)
namespace alias qualifier (::修飾子の追加)
extern alias (コンパイラーオプションの拡張)
#pragma
プリプロセッサー命令の追加
Conditional属性
固定長配列
デリゲートのCovariance/Contravariance
C# 3.0からの新機能
暗黙的型付け(var)
拡張メソッド
ラムダ式
初期化子
匿名型
暗黙型付け配列
LINQ
自動プロパティ
パーシャルメソッド(部分メソッド)
C# 4.0からの新機能
動的型付け
変数
オプション引数・名前付き引数
ジェネリックの共変性・反変性
COM 相互運用時の特別処理
C# 5.0からの新機能
非同期処理 (async/awaitキーワード)
Caller Info属性 (
C/C++
の
__FILE__
や
__LINE__
相当の機能)
foreachの
仕様変更
(非互換の変更)
C# 6.0からの新機能
非同期処理 (async/awaitキーワード)
自動プロパティの拡張
expression-bodied メンバー
null 条件演算子
文字列整形用構文
nameof 演算子
using static
インデックス初期化子
例外フィルター
catch
/
finally
句内での await
拡張メソッドでのコレクション初期化子
ユーザー定義コード解析に対する #pragma warning
オーバーロード解決の改善
特徴
Javaの対抗
.NET Framework
上の
仮想計算機
(VM)であるCLR(Common Language Runtime)で動作するもので、
Java
の対抗言語であり、Javaの機能の全て、及びそれ以上の機能を搭載する。
XML
プログラミングを簡易化する機構などを備えており、Javaや
Visual Basic
、またはそれらと同種の多くを兼ね備えた言語とされる。同社は「C++の開発者をモダンワールドに移行させる」言語としている。
Javaとの差
言語仕様は、Javaに近い。
例えば、CにはなくJavaにはある
ガベージコレクション
機能が採用された。
またMicrosoft製Javaでは意図的に変数が初期化されなかったが、C#では変数はシステムによって自動的に初期化される等の違いがある。
無節操
C#が何を目指しているのか、全く分からない。
登場時点では「クラスオブジェクト指向」を標榜していた。
C# 3.0の頃に「関数型」などと言い出した
現在は「スクリプト言語的な動的言語」などと言っている
バージョンが上がるごとに別の言語となっているようである。
国際標準化
Javaは
Sun Microsystems
が開発し、現在はOracleに継承されている
デファクトスタンダード
で、かつ国際標準化はしない旨がSun Microsystemsより明言されていた。このようなポリシーは、Linux等
オープンソース
系OSとは適合が悪い。しかしC#は最初から国際標準が目指された。
2001(平成13)年12月:
Ecma International
へ提出されたものがECMA-334として標準化された
2002(平成14)年10月: ISO標準となる見通しが発表された
2003(平成15)年: ISO/IEC 23270としてISOで標準化された
2005(平成17)年3月22日: JIS X 3015「プログラム言語C#」として日本でもJISとして規格化された
言語そのものは国際標準となった。実行環境である
共通言語基盤
(CLI)の基本的な仕様も国際標準として公開されている。
ただし、CLIを基盤とした公式の実装である
.NET Framework
の全機能は公開されておらず、またWindows版以外にはない。このため、普通に.NET用に作られたアプリケーションは、公式にはWindows以外では動作できない。実行環境については、オープンソースでMonoなどの互換実装が開発されている。
再検索