C#

読み:スィーシャープ
外語:C# 英語
品詞:名詞

C++をベースとした、独自のプログラミング言語の一つ。

目次

  • 枠組み ‐ 手続き型、命令型、オブジェクト指向
  • 発表日 ‐ 2000(平成12)年6月26日
  • 設計者 ‐ アンダース・ヘルスバーグ(Anders Hejlsberg)
  • 開発者 ‐ Microsoft
  • 最新版 ‐ C# 6.0
  • 言語影響関係
  • 主要動作環境 ‐ 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からの新機能

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などの互換実装が開発されている。

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club