MSDN docs state“表达式是可以计算为单个值,对象,方法或命名空间的代码片段。”
有人可以解释一下表达式评估命名空间意味着什么 - 这怎么可能?
编辑:修复拼写错误
答案 0 :(得分:10)
这就是语法的定义方式。看看:
System.String
是一个包含点运算符的表达式,该运算符对几个不同的表达式进行操作。仅System
被认为是一种表达。表达式可以像单个标识符或文字一样简单(提示:它是递归定义的。)
表达式(C#3.5规范部分§7.1:表达式分类)
表达式被分类为以下之一:
...
命名空间。具有此分类的表达式只能显示为成员访问的左侧(第7.5.4节)。在任何其他上下文中,分类为命名空间的表达式会导致编译时错误。
不能使用它,因为,例如,方法的参数不会取消它被视为表达式。
答案 1 :(得分:3)
但是,虽然命名空间名称是 它被归类为表达式 不评估价值因此 永远不会是任何人的最终结果 表达。你无法通过 命名空间名称到方法参数, 或者在新的表达中使用它,或者 将其分配给变量。你只能 将它用作较大的子表达式 表达。类型也是如此 (与System .. ::。Type不同 对象),方法组名称(如 与特定方法不同),和 事件添加和删除访问者。
所以实际上你不能真正做任何事情,命名空间是一个表达式,它总是以与你可以影响它的任何动态相同的方式工作,但对于解析器,命名空间必须是某种东西:)。它是表达式的原因是由于在编译过程中用于解析代码的C#语言的语法。它由语句,表达式,运算符等组成......因此,在System.Guid的情况下,yourGuid = System.Guid.NewGuid()系统部分将是一个包含命名空间的表达式。将是一个操作符,Guid将是C#解析器的一种类型。
答案 2 :(得分:0)
foo = System;
System
计算到命名空间。
(当然,这不会编译,因为你不能将命名空间分配给变量,但你明白了。)
答案 3 :(得分:0)
你可以使用这样的表达式:
using OutlookStuff = Microsoft.Office.Outlook.This.Is.Really.Long.Isnt.It;
然后能够在代码中使用表达式。当存在名称空间争用时,这可能很有用,例如,如果您有类似MailItem的类或在多个名称空间中通用的类。
所以你现在可以这样做:
var mailItem = new OutlookStuff.MailItem();
编辑我认为Mehrdad的答案是更正确的答案,但我认为值得注意。