C#

.NET上で動く言語。昔は「Windowsアプリを作るための言語」という感じだったが、最近はマルチプラットフォーム化に力を入れている。
C#という名はC++++から来ているらしいが、言語設計はC++というよりJavaに似ていると言われる。
似ているどころかJavaのパクリだと言われていたが、Javaが長らく機能追加しないうちにどんどんJavaにない機能を追加していった。結果としてかなり機能が多い言語になっている。オブジェクト指向言語であるが、いわゆる函数型言語から引っ張ってきた機能も数多い(Java方面ではScalaやKotolinのような“Better Java”的な言語が生み出されたが、C#ではC#本体に言語機能が追加されまくったためにあまりそういう話は聞かない)。

.NET

.NETというのはC#などが動いているプラットフォームの総称。仮想マシンや中間言語、標準ライブラリが含まれる。
Microsoftが実装したものだけではなくいくつかの実装が存在し、それらの間の互換性は.NET Standardという規格により保証されている。

代表的な実装:

とまあいくつかあったのだが、2020年11月に出る .Net 5 でこれらの実装は統一されるらしい(出典:再統合された .NET:.NET 5 に関する Microsoft の計画)。

.NET上で動く言語(CLI言語)はC#だけではない。Microsoftがおおっぴらに宣伝しているものでは他にVisual BasicとF#がある。他の言語はwp: List of CLI languagesを参照。

.NETの上の世界はガベージコレクタが走っており型検査ができるなど安全であることから、マネージドといわれる。一方、そうでない(C言語やアセンブリで動く)外界はアンマネージドとかネイティブとか呼ばれる。

P/Invoke(プラットフォーム呼び出し)

.NETの世界(マネージドな世界)からC言語等で書かれたライブラリ(アンマネージドな世界)の機能を呼び出すための機能。
.NETの機能なのでC#以外のCLI言語でも使える。

これを使いたくなる需要で大きなものはおそらくWindows APIの呼び出しである。本来P/InvokeするためにはC言語のヘッダに書くものに相当する宣言を書かなくてはならないのだが、Windows APIで必要になる宣言はPInvoke.netにまとめられているため、これをコピペすれば良い。非常に便利。

Windows API以外、特にOSSのCのライブラリを使いたい場合は、P/Invokeに手を出す前にまず.NETのバインディングが存在していないか検索してみることをおすすめする。


最終更新: 2020-01-31 18:08:19 +0900

[Top]

This page is generated by sinanoki.