CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
C Sharp - Wikipedia

C Sharp

出典: フリー百科事典『ウィキペディア(Wikipedia)』

この記事に付けられた題名はウィキペディアの技術的制限から不正確なものとなっています。本来の表記は「C#」です。
C#
パラダイム: オブジェクト指向プログラミング
登場時期: 1990年代後半
開発者: マイクロソフト
最新リリース: C# 2.0
型付け: 強い静的型付け
主な処理系: .NET Framework、Mono他
方言: 1.0, 1.5 , 2.0 (ECMA)
影響を受けた言語: DelphiC++JavaEiffel
影響を与えた言語: NemerleD言語Java
プラットフォーム: Microsoft Windows

C#(シーシャープ)はマイクロソフト社によって同社の.NET戦略の一環として開発されたオブジェクト指向プログラミング言語である。C#の開発にはボーランド社のDelphiを開発したアンダース・ヘルスバーグ (en:Anders Hejlsberg) が参加している。

C#は共通言語基盤共通言語ランタイムなど)が解釈する共通中間言語コンパイルされて実行される。言語仕様はJITコンパイルを前提として設計されている。C#の構文はC++とも似ているが、それ以上にサン・マイクロシステムズ社によるJavaと良く似た構文や実行機構を持っている。またプロパティデリゲートなどのObject Pascal由来とおぼしき言語機能も備えている。

C#は、boxing/unboxingデリゲートプロパティインデクサコメントでの属性情報付加、unsafe宣言した箇所でのポインタ演算操作、構造体(値型オブジェクト、struct)、多次元配列可変長引数、などの機能を持つ。また、Javaと同様に大規模ライブラリ、プロセッサ・アーキテクチャに依存しない実行形態、ガベージコレクションJITコンパイルによる実行の高速化、などが実現されている。

C#は.NET構想における中心的な開発言語であり、XML WebサービスASP.NETの記述に使用される(他の.NET系の言語でも記述可能であるが、おそらく生産性・機能においてC#がもっとも優れている)。C#は統合開発環境であるMicrosoft Visual C#によってサポートされている。

C#では、共通言語ランタイム(CLR)を通じて、他のCLR上の言語Visual Basic .NETVisual C++ (C++/CLI)などを相互に連携することができる。また、他言語で記述されたクラス継承することも、またその逆も可能である。

2005年3月22日には、日本工業規格 JIS X 3015 プログラミング言語C# として、標準化された。

目次

[編集] 言語仕様

C#は、さまざまな意味において、基盤であるCLIの機能をもっとも反映している言語であるといえる。C#にある組み込み型のほとんどは、CLIフレームワークに実装されている値型と対応している。しかし、C#の言語仕様はコンパイラのコード生成については何も言及していない。つまり、CLRに対応しなければならないとか、(MSILなどの)特定のフォーマットのコードを生成しなければならないとかいうことは述べられていない。そのため、理論的にはC++FORTRANのように環境依存のマシン語を生成することも可能である。とはいえ、マイクロソフトによるC#の実装はその他の実装に比べてはるかに優れたものであり、この記事では特に記述のない限りマイクロソフトの実装の特徴やふるまいについて書くことにする。

C#は、CやC++と比較してさまざまな制限や改良が加えられている。すべてではないがその例を次に挙げる。

  • グローバル変数やグローバルメソッドは存在しない。すべてのメソッドとメンバはクラスの一部として宣言されなければならない。
  • 外のブロックで宣言した変数名を、内のブロックで再宣言してはいけない。これはC++ではしばしば混乱や曖昧のもととされているが、C#では禁止されている。
  • (Cのprintf()関数のように)関数をグローバルで公開する代わりに、すべての関数はクラス内で宣言されなければならない。ほとんどの場合、クラスは名前の衝突を避けるために名前空間に所属する。
  • 名前空間は階層構造をもつ。つまり、名前空間は他の名前空間の中に宣言することができる。
  • 原始型を含めたすべての型は、objectクラスの派生クラスである。つまりobjectクラスのもつすべてのプロパティやメソッドを継承する。例えば、すべての型はToString()メソッドをもつ。
  • C#にはブール型boolが存在する。whileifのように条件をとるステートメントには、bool型の式を与えなければならない。CやC++にもブール型が存在するが、これは整数型と相互に変換可能であった。つまり、CやC++ではwhile文やif文に与える式が整数やポインタであってもよかった。C#ではミスを防止するために、このブール型と整数が可換であるという仕様を禁止している。
  • ポインタをサポートする。ポインタはunsafeスコープ内のみで使用することができ、適切な権限をもつプログラムのみがunsafeとマークされたコードを実行することができる。オブジェクトへのアクセスの大部分は管理された安全な参照によってなされ、大部分の算術演算はオーバフローのチェックがなされる。unsafeポインタは値型や文字列を指すことができる。セーフコードでは、(必ずしもそうする必要はないものの)System.IntPtr型を通してポインタをやりとりすることができる。
  • マネージドなメモリは明示的に解放することはできないが、参照されなくなったメモリはガベージコレクタによって自動的に解放される。ガベージコレクタは、メモリの解放忘れによって起こるメモリリークを解消する。C#は、データベース接続のようなアンマネージドなリソースに対しても明示的に制御する方法を提供している。これはIDisposableインタフェースとusingステートメントによってなされる。
  • クラスは複数のインタフェースを実装することができるが、多重継承はサポートされない。
  • C#はC++に比べてタイプセーフである。既定の暗黙変換は、整数の範囲を広げる変換であったり、派生クラスから基底クラスへの変換であったりといった、安全な変換のみに限定される。これは、コンパイル時、JITコンパイル時、そして一部の動的なケースでは実行時に強制される。ブール型と整数型、列挙型と整数型、の間は暗黙変換はできない。暗黙変換をユーザ定義する際は、明示的にそのように指定しなければならない。これはC++のコピーコンストラクタとは違った仕様である。
  • 列挙型のメンバは、列挙型の名前空間の中におかれる。
  • プロパティと呼ばれるアクセサは、C++におけるメンバフィールドのような構文でオブジェクトにアクセスすることができる。C++では、publicとしてメンバを宣言することでメンバを読むことも変更することもできるようになるが、C#ではプロパティによってメンバアクセスやデータの正当性チェックを制御することができる。
  • リフレクションが完全サポートされる。

[編集] C# 2.0からの仕様

  • クラスの宣言にpartial属性をつけることで、一つのクラスを複数のファイルにまたがって書くことができる。これによって、巨大なクラスを分割したり、自動生成されたコードを分離したりすることができる。partial属性はすべてのファイルのクラス宣言につける必要がある。
  • ジェネリック型(パラメタ付型)が導入された。これは.NET 2.0の機能である。.NETのジェネリック型はC++のテンプレートとは異なり、コンパイルによってではなく実行時に特殊化される。これによって異なる言語間の運用を可能にしている。また、インタフェースによって型パラメタに制約を与えることができる。一方、C++のように型パラメタとしてを指定することはできない。
  • 静的クラスが導入された。static属性をクラスの宣言につけることで、クラスはインスタンス化できなくなり、静的なメンバしか持つことができなくなる。
  • プロパティのget/setアクセサのアクセス制御が別個にできるようになった。次の例では、getアクセサをpublicと宣言することによって外部から利用可能にしている一方で、setアクセサをinternalと宣言することで、同一アセンブリ内からのみ値の設定ができるようにしている。
string status = string.Empty;
public string Status
{
    get { return status; }     
    internal set { status = value; }
}
  • Nullable型を使用することで、値型にnullを代入できるようになった(例:int? i = null;)。nullが代入されたNullable型は実際にはnull参照ではなく、値型である。従って、これをボックス化するとnullではない参照が得られる。
  • null結合演算子 (??) が導入された。nullでない最初の値を返す。
object obj1 = null;
object obj2 = new object();
object obj3 = new object();
return obj1 ?? obj2 ?? obj3; // returns obj2

この演算子は主にNullable型を非Nullable型に代入する時に使われる。

int? i = null;
int j = i ?? -1; // nullをint型に代入することはできない

[編集] 実装

C#の言語仕様は標準化団体ECMAを通じて公開・標準化されており、第三者がマイクロソフトとは無関係に実装することができる。 現段階で、C#の実装は次の4つが知られている。

[編集] 名称

  • 規格によると、C#は「C Sharp」と発音し、「C#」(LATIN CAPITAL LETTER C (U+0043) の後に NUMBER SIGN # (U+0023))と書く。音楽のシャープ(♯,MUSIC SHARP SIGN (U+266F))ではなくナンバーサイン(#)を採用したのは、フォントやブラウザなどの技術的な制約に加え、標準的キーボードには前者の記号が存在しないためである。
  • "#"接尾辞は、既存言語から派生した多くの.NET言語にも使用されている。これには、J#(Javaのマイクロソフトによる実装)、A#(Adaから)、F#(おそらくMLファミリに使われた型システムのSystem Fから)が含まれる。この接尾辞はGtk#(GTK+などのGNOMEライブラリの.NETラッパ)、Cocoa#(Cocoaのラッパ)などのライブラリにも使用されている。
  • C#という名称の解釈として、「(A~Gで表された)直前の音を半音上げる」という音楽記号の役割に着目し、「C言語を改良したもの」を意味したのではないか、というものがある。これは、C++の名称が「C言語を1つ進めたもの」という意味でつけられたことにも似ている。
  • アンダース・ヘルスバーグは、「C#」が「C++++」(すなわち「C++をさらに進めたもの」)にみえるのが由来である、と語っている。

[編集] 外部リンク

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Sub-domains

CDRoms - Magnatune - Librivox - Liber Liber - Encyclopaedia Britannica - Project Gutenberg - Wikipedia 2008 - Wikipedia 2007 - Wikipedia 2006 -

Other Domains

https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformtivo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com