System.Type对象有什么特别之处?什么是方法组名称?

时间:2018-02-18 05:54:47

标签: c#

我正在阅读C#文档,我遇到了这些句子:

  

虽然命名空间名称被分类为表达式,但它没有   评估一个值,因此永远不会是任何一个的最终结果   表达。您不能将命名空间名称传递给方法参数,或   在新表达式中使用它,或将其分配给变量。你只能   将它用作较大表达式中的子表达式。同样如此   对于类型(与System.Type对象不同),方法组名称   (与具体方法不同)

究竟是什么“对类型(与System.Type对象不同)的情况也是如此”是什么意思?你能用System.Type给我一个例子吗?它与反射有关吗?

“方法组名称”和“具体方法”是什么?

1 个答案:

答案 0 :(得分:2)

这意味着并非所有表达式都以值开头。一些表达式是名称空间或类型。

考虑可能出现在右侧的内容:

var foo = some_expression;

大多数表达式都适用于some_expression,因为大多数表达式都是值。但有些表达方式不是。例如intSystem

var foo = int; // ERROR

然而,类型可以是 值的表达式的一部分:

var foo1 = 42 is int; // foo1 is a bool
var foo2 = typeof(int); // foo2 is a System.Type object
var foo3 = default(int); // foo3 is an int

同样,System之类的名称空间不是值,但表达式。您可以使用命名空间表达式来获取其他表达式 - 例如,使用点.运算符来形成类型表达式。 System.String是一个类型的表达式。并且,和以前一样,您可以进一步将其写为typeof(System.String)以获取表达式,该表达式是您可以分配给变量的实际值。

我建议查看在LINQ或Lambda表达式中使用的表达式树,或者在发出IL时设置表达式的方式。这可能真的有助于你掌握语言(和编译器)如何处理表达式以及语法定义的原因。

https://msdn.microsoft.com/en-us/library/system.linq.expressions(v=vs.110).aspx

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/expressions