23

何よりも好奇心からの質問ですが、なぜ C# はキーワードに対して 2 つの異なる「目的」を定義しているのusingでしょうか。一方では、それは指令です...

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

一方、それは声明です...

スコープを定義し、その外側で 1 つまたは複数のオブジェクトが破棄されます。

私には、同じキーワードのさまざまな用途のように思えますが、何かが足りないのかもしれません。このキーワードが 2 つの異なる目的を持つ理由はありますか? それとも、これらの目的は両方とも、コンパイラーの奥深くにあるもので、本当に同じものなのでしょうか?

4

3 に答える 3

19

これら 2 つの使用法がコンパイラーでどのように同じものになるのか、私にはわかりません。

二重使用の理由は、キーワードが両方の目的に非常によく適合し、あいまいさの危険がないという単純な事実だと思います(一方は指示的で、もう一方はステートメントであるため、まったく異なるコンテキストで表示されます)。これはまったく問題ないと思います.言語には少数のキーワードが必要であり、それらの使用法は理解しやすいものでなければなりませんusing..

Linkgorn がコメントで述べたように、同じ状況の別の例は、where2 つの場所 (一般的な制約と LINQ クエリ構文) にも存在します。

于 2011-03-10T14:22:44.220 に答える
3

1つは、どちらも単語に適合していることです。また、両方を同じコンテキストで使用することはできないため、互いに混同することはできません。

その理由は、言葉遣いの好みは別として、言語キーワードの数になります。

キーワードは、ライブラリクラスなどとは別のものです。名前空間を使用して必要なメソッドを指定できるため、DateTime型を壊したり、重複したりすることなく、DateTimeというメソッドを作成できます。ただし、言語キーワードであるため、「public」というメソッドまたは変数を作成することはできません*。

このため、ほとんどの言語はキーワードの数を最小限に抑えようとしています(使用されるキーワードの数が少ないと自慢する言語もあります)。キーワードとして使用される英語のすべての単語は、他の用途のためにプログラマーが利用できなくなります。可能であれば、プログラマー辞書から別のページを完全に削除するのではなく、既存のキーワードを再利用することをお勧めします(特に、言語がすでに使用されている場合、新しいキーワードは、それを識別子として使用したコードを壊します)

于 2011-03-10T14:36:16.870 に答える