8

ぼんやりとfrom識別子として使用していることに気づきました。

を使用@して識別子名をエスケープし、予約語を使用できることは理解していますが、この場合に警告やエラーが発生しなかった理由がわかりません。

予約語を本来の目的以外に使用するつもりはありませんが、同じような間違いを繰り返したくないので、特定の状況で予約されていない言語キーワードを使用する理由を知りたいです。

4

6 に答える 6

13

一部のキーワードは、特定のコンテキストでのみ予約されていpartialますpartial class

MSDN のこのトピックの下にある「コンテキスト キーワード」を参照してください。

于 2010-12-02T19:02:14.190 に答える
4

C# チームは特に、言語で新しい予約済みキーワードを作成しないようにしています。追加された新しいキーワードは、そのキーワードを識別子として使用していた既存のコードを自動的に壊すことを意味します。したがって、C# は可能な限りコンテキスト キーワードを使用して、既存のコードが壊れる可能性を最小限に抑えるか、排除します。

コンテキスト キーワードはfrompartialvar、 などの特定のコンテキストで使用される場合にのみキーワードとなるものです。そのコンテキストには識別子は含まれません :)

C# 2.0 以降に新しいキーワードが追加されたとは思えません (2.0 で追加されたかどうかさえわかりません)。

于 2010-12-02T19:03:37.423 に答える
3

fromは「コンテキスト キーワード」です。C# のそれらの多くは、特定のコンテキストで使用された場合にのみキーワードのように動作します。大きな利点は、そのようなコンテキスト キーワードを言語に追加しても、既存のコードが壊れないことです。

このMSDN ページの 2 番目の表にリストされています。うん、そこから

于 2010-12-02T19:04:34.127 に答える
2

コンテキストに依存する場合は予約されません( MSDN リンク):

コンテキスト キーワードは、コード内で特定の意味を提供するために使用されますが、C# の予約語ではありません。一部のコンテキスト キーワード (partial や where など) は、2 つ以上のコンテキストで特別な意味を持ちます。

于 2010-12-02T19:03:19.213 に答える
1

根本的な質問に答えるには:

C# 1 の後に追加されたすべてのキーワードは文脈依存です。これにより、重大な変更が回避されます。

addアクセサー キーワード ( 、removeget、および)を除いて、ほとんどすべての C# 1 キーワードは予約されていますset

于 2010-12-02T19:07:48.213 に答える
0

ほとんどの C# キーワードは常に予約されています。お気づきのように、一部は一部のコンテキストでのみ予約されています。それらはコンテキスト キーワードと呼ばれます。これは下位互換性をより確実にするための方法だと思います。

その理由はfrom、C# 2 では完全に受け入れられる変数名だったからです。C# 3 では LINQ が追加され、そのためのキーワードが必要でした。最大限の互換性を維持するために、fromがコンテキスト キーワードとして追加されました。

于 2010-12-02T19:04:46.533 に答える