C# ではなぜ `using` の 2 つの異なる使用法が定義されているのでしょうか? 質問する

C# ではなぜ `using` の 2 つの異なる使用法が定義されているのでしょうか? 質問する

好奇心からくる質問ですが、なぜ C# はキーワードに 2 つの異なる「目的」を定義するのでしょうかusing。一方では、これはディレクティブです...

名前空間のエイリアスを作成したり、他の名前空間で定義された型をインポートしたりするために使用されます。

一方、それは次のような発言です...

オブジェクトが破棄される範囲を定義します。

私には、同じキーワードの異なる用途のように思えますが、何か見落としているのかもしれません。このキーワードが 2 つの異なる目的を持つのには理由があるのでしょうか。それとも、コンパイラの奥深くにあるこれらの目的は、実際には同じものなのでしょうか。

ベストアンサー1

数年前、私はエリック・リッパートのブログで同じ質問をした。ここ(最初のコメントを参照)。

彼の返答はこうでした。

これは言語設計の難しい点です。1 つのキーワードが 2 つのまったく異なる概念を表すために使用されると、混乱を招く可能性があります。しかし、概念ごとに新しいキーワードを導入すると、言語が少し肥大化したように感じられます。私個人としては、ディレクティブ形式がステートメント形式と混同されないようにするために、「imports」などの構文をディレクティブ形式に選択したと思いますが、これは判断の問題だと理解しています。

私たちは C# 4.0 の機能を設計していましたが、それは「部分」クラスの別の形式でした。基本的には、部分クラスのマシン生成部分とユーザー生成部分の間で属性メタデータを共有する方法です。私は、この機能にキーワード「部分」を使用することに反対しました。そうすると、C# の「部分」に 3 つの微妙に異なる意味が生まれ、2 つ多すぎると感じたからです。(私は別の条件キーワード「existing」を追加することを提唱していました。残念ながら、この機能は時間不足で削除されたため、その点は意味をなさなくなりました。) -- Eric

Eric が誰かわからない人のために説明すると、彼は C# コンパイラ チームの開発者です。

おすすめ記事