`
cdragon
  • 浏览: 78347 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

effective hierarchy(一)之 基本概念(8)

阅读更多

MSDN,C#2

 

一、语句

1.结束点和可达性(end points and reachability)

 

 (1)每个语句都有结束点。按照直觉(in intuitive terms),结束点是紧跟在语句后面的那个位置。复合语句(composite statements ,也叫合成语句,即包含嵌入语句的语句)的执行规则规定了(执行)控制到达一个嵌入语句的结束点时所采取的措施(action)。例如,当控制到达块中某个语句的结束点时,控制就转到该块中的下一个语句。

 

   (2)如果语句能够通过执行(遂可能)到达某个语句,则称该语句是可到达的。相反,如果某个语句不可能被执行,则称该语句是不可到达的。

          

void F() {
   Console.WriteLine("reachable");
   goto Label;
   Console.WriteLine("unreachable");//不可到达
   Label:
   Console.WriteLine("reachable");
}

 

   (3)如果编译器确定某个语句不可达,虽非错误,但会引发警告(warning)。

           为确定某个特定的语句或结束点是否是可达的,编译器遵循为每个语句定义的可达性规则(reachability rules)进行流分析(flow analysis)。流分析考量(take into account)常量表达式的值(该值用来控制语句行为),而并不考虑非常量表达式的可能值。换句话说,从控制流分析(control flow)的角度,给定类型的非常量表达式(如变量)视为那个类型的任何可能值。

   

//常量表达式,Console.WriteLine非可达
void F() {
   const int i = 1;
   if (i == 2) Console.WriteLine("unreachable");
}

//虽然事实上不可能执行,但因为是本地变量(表达式),Console.WriteLine可达
void F() {
   int i = 1;
   if (i == 2) Console.WriteLine("reachable");
}

 

 

   (4) 函数成员中的块总是视为可达。通过依次测算块中每条语句的可达性规则,以确定任何给定语句的可达性。

            void F(int x) {

                Console.WriteLine("start");
                if (x < 0) Console.WriteLine("negative"); }

 

           第二个 Console.WriteLine 的可到达性按下面顺序确定:

            ~第一个 Console.WriteLine 表达式语句是可到达的,原因是 F 方法的块是可到达的。

            ~第一个 Console.WriteLine 表达式语句的结束点是可到达的,原因是该语句是可到达的。

         ~if 语句是可到达的,原因是第一个 Console.WriteLine 表达式语句的结束点是可到达的。

                ~第二个 Console.WriteLine 表达式语句是可到达的,原因是 if 语句的布尔表达式不是常数值 false。 

 

   (5)如下两种情况,控制可到达某语句的结束点,会引起编译时错误:

           1'由于 switch 语句不允许一个 switch 节穿越(fall through)到相邻的switch节,因此如果一个switch 节的语句列表的结束点可达,会引出编译时错误,表明该处遗漏掉一个break语句。

           2'如果计算求某值(value)的函数成员块的结束点可达,会引出编译时错误,表明该处遗漏了一个return语句。

 

二、语句类型

   (1)statement:(语句包括:)
labeled-statement(标记语句)
    identifier   :   statement
declaration-statement(声明语句)   
            local-variable-declaration   ;
            local-constant-declaration   ;
embedded-statement(嵌入语句)

        embedded-statement(嵌入语句):

   block(块):
          {   statement-listopt   }
               statement-list:
         statement
         statement-list   statement

   empty-statement:(空语句);

   expression-statement:(表达式语句)
          statement-expression   ;
          statement-expression:
  invocation-expression
  object-creation-expression
  assignment
  post-increment-expression
  post-decrement-expression
  pre-increment-expression
  pre-decrement-expression

   selection-statement:(选择语句)
         if-statement
         switch-statement 

   iteration-statement(迭代语句)
          while-statement
          do-statement
          for-statement
          foreach-statement 

   jump-statement(跳转语句):
         break-statement
         continue-statement
         goto-statement
         return-statement
         throw-statement 

   try-statement(try 语句)

   checked-statement(checked 语句):
       checked   block

   unchecked-statement(unchecked 语句)
       unchecked   block 
   lock-statement(lock 语句)

   using-statement(using 语句)
 
   (2)非结束性(non-terminal)“嵌入语句”用于出现(appear)在其他语句中的语句。 嵌入语句(embedded statement)与普通语句(statement)的区别在于,嵌入语句在上下文语境中(context)排除声明语句和标签语句(declaration statements and labeled statements)。
           
//下列的i将引发编译时错误,因为这时的语境要求嵌入语句而非语句
void F(bool b) {
   if (b)
      int i = 44;
}

//但如果i放在块内,则是合法的.
 
         
三、名字空间
      C#使用名字空间来组织程序,它既用作内部的(internal)系统组织,也用作外部的(external)系统组织(向其它程序公开展示程序的元素);

       using命令提供用来“便利”名字空间使用(facilitate the use)。

 

       using-alias-directive引入名字空间或类型的别名;

       using-namespace-directive导入名字空间的类型成员;

 

四、类型声明

   (1) type-declaration:
              class-declaration(类声明)
              struct-declaration(结构声明)
              interface-declaration(接口声明)
              enum-declaration(枚举声明)
              delegate-declaration(委托声明)

 

   (2)类型声明能够作为顶级声明出现在编译单元中,或者作为成员声明出现在命名空间、类或结构内部;

   (3)当类型 T 的类型声明作为编译单元中的顶级声明出现时,新声明的类型的完全限定名正好是 T。当类型 T 的类型声明出现在命名空间、类或结构内时,新声明的类型的完全限定名是 N.T,其中 N 是包含它的命名空间、类或结构的完全限定名;

   (4)在类或结构内声明的类型称为嵌套类型(nested type);

   (5)某个类型声明所允许使用的访问修饰符(access modifiers)及默认的访问(default access)取决于出现声明处的环境。

           ~在编译单元和命名空间中声明的类型可以具有publicinternal(默认)访问属性。

           ~在类中声明的类型可以具有 publicprotected internalprotectedinternalprivate (默认)访问属性。

           ~在结构中声明的类型可以具有 publicinternalprivate(默认访问属性。 

分享到:
评论

相关推荐

    IRQ hierarchy的初始化及构建过程详解

    在了解 IRQ hierarchy 的初始化及构建过程之前,需要先了解三个基本概念:IRQ、HWIRQ 和 GSI。 IRQ(Interrupt Request)是系统中的一种机制,允许外部设备请求 CPU 的注意,以便处理某些事件。IRQ 是一个抽象的...

    Android 实用工具Hierarchy Viewer实战

    Android 开发中,UI 分析工具 Hierarchy Viewer 是一个非常有用的工具,可以帮助开发者快速、方便地设计、调试和调整界面,提高用户的开发效率。本文将详细介绍如何使用 Hierarchy Viewer 工具在 Android 开发过程中...

    Android View Hierarchy,解决View Hierarchy不能启动

    解决这个启动 View Hierarchy时的这个bug: hierarchy viewer unable to debug device

    SAP BW Hierarchy Extractor

    本篇文档将详细介绍如何为员工及其部门经理创建一个层次数据源(Hierarchy Extractor)。通过这个层次数据源,管理者可以方便地获取到他们直接下属的信息以及这些下属所负责或有权访问的数据。此文档适用于运行ECC 5.0...

    Hierarchy面板管理插件(Unity)

    Hierarchy PRO是一个高级的Hierarchy面板扩展,它提供了更多的自定义选项和便捷的功能。此插件可能包括但不限于以下特性: 1. **过滤与排序**:Hierarchy PRO允许用户根据需求筛选和排序场景中的游戏对象,比如按...

    android工具Hierarchy_Viewer命令详解

    Hierarchy Viewer是Android SDK中自带的一款强大的UI设计与检测工具。它位于Android SDK的`tools`目录下,文件名为`hierarchyviewer.bat`。对于Android开发者来说,这是一个不可或缺的工具,能够帮助他们在开发过程...

    Unity 提取并拷贝物体Hierarchy路径

    效果及使用方法:https://blog.csdn.net/qq_26318597/article/details/131373576 1.导入插件包 2.选中Hierarchy中的物体 3.右键选择“复制Hierarchy路径” 4.Ctrl + V 粘贴

    Unity Hierarchy面板增强插件 QHierarchy v4.4

    Unity是世界上最流行的游戏开发引擎之一,它为开发者提供了丰富的工具集来创建交互式3D和2D内容。在Unity中,Hierarchy面板是一个至关重要的组成部分,它显示了场景中的所有游戏对象及其层次结构。QHierarchy是一款...

    Enhanced_Hierarchy_2.0_v2.4.5.unitypackage

    Enhanced_Hierarchy_2.0_v2.4.5.unitypackage 最新版本哦 正版

    Hierarchy PRO 2021 v2021.1u9.unitypackage

    Hierarchy PRO 2021 v2021.1u9

    Unity 层级编辑器插件最新版 Hierarchy PRO v2019.3p4

    Unity是世界上最受欢迎的游戏开发引擎之一,它提供了丰富的工具和功能,让开发者能够创建高质量的2D和3D游戏。在Unity中,"层级编辑器"(Hierarchy)是至关重要的一个部分,它允许开发者组织和管理场景中的游戏对象...

    Evolve Your Hierarchy

    在游戏开发领域,“演化你的游戏实体层级”(Evolve Your Hierarchy)这一概念强调了从传统的深度类层级结构向更灵活、可扩展的游戏实体组件化方法转变的重要性。这种方法不仅提高了代码的复用性与可维护性,还简化...

    WPF Class Hierarchy

    WPF Class Hierarchy

    VS2010 MFC Hierarchy Chart

    通过阅读和理解《VS2010 MFC Hierarchy Chart》的三个部分(MFC_Hierarchy_Chart1of3.pdf、MFC_Hierarchy_Chart2of3.pdf、MFC_Hierarchy_Chart3of3.pdf),开发者可以深入理解MFC的内部结构,从而更好地利用MFC开发...

    Hierarchy2 v1.3.10.0

    Hierarchy2 v1.3.10.0

    前端项目-d3-hierarchy.zip

    在这个名为“前端项目-d3-hierarchy.zip”的压缩包中,包含了一个使用D3.js库实现的层次数据可视化布局算法。D3.js(Data-Driven Documents)是一个强大的JavaScript库,专为创建动态、交互式的SVG、Canvas或WebGL...

    ADS 2011 hierarchy

    网络列表可以包含基本元件、元件库中的模型以及用户定义的函数。 4. **元件库(Component Libraries)**:ADS提供丰富的内置元件库,包括模拟、数字和射频元件。设计师可以自定义库,创建专用的元件模型以满足特定...

Global site tag (gtag.js) - Google Analytics