

解決済み

> その記述は2010年ごろの英語版Wikipediaが翻訳されたものですが、現在の英語版ではC#2.0は第一級関数を持つと記載されています。 –
> pgrho

なぜC#は第一級関数を持たないとされているのでしょうか？  
また、今後どのような機能が追加されたら第一級関数を持っていると言えるようになるのでしょうか？

[Wikipedia:
第一級オブジェクト](https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88)と[Wikipedia:
第一級関数](https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E9%96%A2%E6%95%B0)は読みましたが、

>
> CやC++、C#、Pascalなどのプログラミング言語は関数ポインタをサポートしており、データ構造に含めたり他の関数に引数として渡したりすることができる。しかし、それらの関数は一般にリフレクションなしではプログラムの実行時に動的に生成することができないため、第一級関数をサポートしているとは見なされていない。  
>
> 最も第一級関数に近いのは、C#のJITコンパイラによって動的に生成された関数である。これは機械語命令の配列としてメモリにコンパイルされ、関数ポインタへキャストされる。しかしながら、このテクニックは下層管理のフレームワークアーキテクチャに依存しており移植可能でない。もしWindowsを使用しているならば、C#はタイプセーフな関数ポインタのデリゲート型を持っている。また、C#バージョン3ではラムダ式のサポートが追加された。レキサとパーサはコンパイル時に動作し、コンパイラのラムダコード生成部分は実行時に動作する。

についてはよく分かっていない（式木のコンパイルとか話でしょうか？）ので、このままでの回答はご遠慮くださいm(_ _)m


CC BY-SA 3.0
2015-11-03T04:46:39.870
18347
2015-11-03T07:44:51.703
2015-11-03T07:44:51.703
13080
13080
question
c#
C#が第一級関数を持たないとされている理由