ぼんやりとfrom
識別子として使用していることに気づきました。
を使用@
して識別子名をエスケープし、予約語を使用できることは理解していますが、この場合に警告やエラーが発生しなかった理由がわかりません。
予約語を本来の目的以外に使用するつもりはありませんが、同じような間違いを繰り返したくないので、特定の状況で予約されていない言語キーワードを使用する理由を知りたいです。
ぼんやりとfrom
識別子として使用していることに気づきました。
を使用@
して識別子名をエスケープし、予約語を使用できることは理解していますが、この場合に警告やエラーが発生しなかった理由がわかりません。
予約語を本来の目的以外に使用するつもりはありませんが、同じような間違いを繰り返したくないので、特定の状況で予約されていない言語キーワードを使用する理由を知りたいです。
一部のキーワードは、特定のコンテキストでのみ予約されていpartial
ますpartial class
。
MSDN のこのトピックの下にある「コンテキスト キーワード」を参照してください。
C# チームは特に、言語で新しい予約済みキーワードを作成しないようにしています。追加された新しいキーワードは、そのキーワードを識別子として使用していた既存のコードを自動的に壊すことを意味します。したがって、C# は可能な限りコンテキスト キーワードを使用して、既存のコードが壊れる可能性を最小限に抑えるか、排除します。
コンテキスト キーワードはfrom
、partial
、var
、 などの特定のコンテキストで使用される場合にのみキーワードとなるものです。そのコンテキストには識別子は含まれません :)
C# 2.0 以降に新しいキーワードが追加されたとは思えません (2.0 で追加されたかどうかさえわかりません)。
fromは「コンテキスト キーワード」です。C# のそれらの多くは、特定のコンテキストで使用された場合にのみキーワードのように動作します。大きな利点は、そのようなコンテキスト キーワードを言語に追加しても、既存のコードが壊れないことです。
このMSDN ページの 2 番目の表にリストされています。うん、そこから。
コンテキストに依存する場合は予約されません( MSDN リンク):
コンテキスト キーワードは、コード内で特定の意味を提供するために使用されますが、C# の予約語ではありません。一部のコンテキスト キーワード (partial や where など) は、2 つ以上のコンテキストで特別な意味を持ちます。
根本的な質問に答えるには:
C# 1 の後に追加されたすべてのキーワードは文脈依存です。これにより、重大な変更が回避されます。
add
アクセサー キーワード ( 、remove
、get
、および)を除いて、ほとんどすべての C# 1 キーワードは予約されていますset
。
ほとんどの C# キーワードは常に予約されています。お気づきのように、一部は一部のコンテキストでのみ予約されています。それらはコンテキスト キーワードと呼ばれます。これは下位互換性をより確実にするための方法だと思います。
その理由はfrom
、C# 2 では完全に受け入れられる変数名だったからです。C# 3 では LINQ が追加され、そのためのキーワードが必要でした。最大限の互換性を維持するために、from
がコンテキスト キーワードとして追加されました。