MSDN ドキュメントには、「式は、単一の値、オブジェクト、メソッド、または名前空間に評価できるコードのフラグメントです」と記載されています。
式が名前空間に評価されることの意味を誰か説明してもらえますか?それはどうしてですか?
編集:タイプミスを修正
MSDN ドキュメントには、「式は、単一の値、オブジェクト、メソッド、または名前空間に評価できるコードのフラグメントです」と記載されています。
式が名前空間に評価されることの意味を誰か説明してもらえますか?それはどうしてですか?
編集:タイプミスを修正
これが文法の定義方法です。見る:
System.String
は、いくつかの異なる式に作用するドット演算子を含む式です。System
だけが式と見なされます。式は、単一の識別子またはリテラルと同じくらい単純にすることができます (ヒント: 再帰的に定義されます)。
式 (C# 3.5 仕様セクション §7.1: 式の分類)
式は次のいずれかに分類されます。
...
名前空間。この分類の式は、メンバー アクセス (§7.5.4) の左側としてのみ表示できます。その他のコンテキストでは、名前空間として分類される式はコンパイル時エラーを引き起こします。
たとえば、メソッドへの引数として使用できないからといって、式と見なされないわけではありません。
MSDN のこのページには、次のように書かれています。
ただし、名前空間名は式として分類されますが、値に評価されないため、式の最終結果になることはありません。名前空間名をメソッド パラメーターに渡したり、新しい式で使用したり、変数に割り当てたりすることはできません。これは、より大きな式のサブ式としてのみ使用できます。型 (System..::.Type オブジェクトとは異なる)、メソッド グループ名 (特定のメソッドとは異なる)、およびイベントの追加アクセサーと削除アクセサーについても同じことが言えます。
したがって、実際には、名前空間が式であると実際には何もできません。常に同じように機能し、影響を与えることができる動的なものは何もありませんが、パーサーの場合、名前空間は何かでなければなりません:)。これが式である理由は、コンパイル プロセス中にコードを解析するために使用される C# 言語の文法によるものです。ステートメント、式、演算子などで構成されているため、System.Guid yourGuid = System.Guid.NewGuid() の場合、システム部分は名前空間を含む式であり、. は演算子になり、Guid は C# パーサーの型になります。
foo = System;
System
名前空間に評価されます。
(もちろん、名前空間を変数に割り当てることができないため、これはコンパイルされませんが、アイデアは得られます。)
次のような式を使用できます。
using OutlookStuff = Microsoft.Office.Outlook.This.Is.Really.Long.Isnt.It;
後でコードで式を使用できるようになります。これは、MailItem のようなクラスや、複数の名前空間に共通するクラスがある場合など、名前空間の競合がある場合に役立ちます。
したがって、これを行うことができます:
var mailItem = new OutlookStuff.MailItem();
編集Mehrdadの答えはより正しい答えだと思いますが、これは注目に値すると思いました。