Contents

MSDN的Specifying Fully Qualified Type Names指明了C#中反射接受的字符串需要满足如下的Backus-Naur Form语法。






















































BNF grammar of fully qualified type names



TypeSpec                          :=   ReferenceTypeSpec


                                        |     SimpleTypeSpec



ReferenceTypeSpec            :=   SimpleTypeSpec ‘&’



SimpleTypeSpec                :=   PointerTypeSpec


                                        |     ArrayTypeSpec


                                        |     TypeName



PointerTypeSpec                :=   SimpleTypeSpec ‘



ArrayTypeSpec                  :=   SimpleTypeSpec ‘[ReflectionDimension]’


                                        |     SimpleTypeSpec ‘[ReflectionEmitDimension]’



ReflectionDimension           :=   ‘‘


                                        |     ReflectionDimension ‘,’ ReflectionDimension


                                        |     NOTOKEN



ReflectionEmitDimension    :=   ‘*’


                                        |     Number ‘..’ Number


                                        |     Number ‘…’


                                        |     ReflectionDimension ‘,’ ReflectionDimension


                                        |     NOTOKEN



Number                            :=   [0-9]+



TypeName                         :=   NamespaceTypeName


                                        |     NamespaceTypeName ‘,’ AssemblyNameSpec



NamespaceTypeName        :=   NestedTypeName


                                        |     NamespaceSpec ‘.’ NestedTypeName



NestedTypeName               :=   IDENTIFIER


                                        |     NestedTypeName ‘+’ IDENTIFIER



NamespaceSpec                 :=   IDENTIFIER


                                        |     NamespaceSpec ‘.’ IDENTIFIER



AssemblyNameSpec           :=   IDENTIFIER


                                        |     IDENTIFIER ‘,’ AssemblyProperties



AssemblyProperties            :=   AssemblyProperty


                                        |     AssemblyProperties ‘,’ AssemblyProperty



AssemblyProperty              :=   AssemblyPropertyName ‘=’ AssemblyPropertyValue



Backus-Naur Form的介绍可以看wikipedia的介绍:Backus–Naur Form。他的主要内容如下:



  1. 在双引号中的字(“word”)代表着这些字符本身。而double_quote用来代表双引号。

  2. 在双引号外的字(有可能有下划线)代表着语法部分。

  3. 尖括号( < > )内包含的为必选项。

  4. 方括号( [ ] )内包含的为可选项。

  5. 大括号( { } )内包含的为可重复0至无数次的项。

  6. 竖线( | )表示在其左右两边任选一项,相当于”OR”的意思。

  7. ::= 是“被定义为”的意思。


所以MSDN的表格的第一行就是说,TypeSpec定义为ReferenceTypeSpec或者SimpleTypeSpec,而ReferenceTypeSpec又被定义为SimpleTypeSpec ‘&’,SimpleTypeSpec定义为PointerTypeSpec或者ArrayTypeSpec或者TypeName。以此类推。

Contents