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

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

阅读更多

MSDN,C#2.0

 

变量基本点: 

   变量代表存储位置(storage location);

   每个变量都有个决定在变量中可以存储什么值的类型;

   C#是类型安全(type-safe)的高级语言;

   C# 编译器保证存储在变量中的值总是具有合适的类型;

   变量的值可由赋值或++、--操作符更改;

   在取值(obtain value)之前,变量必须被明确赋值;

   变量初始化有两种:初始已赋值(initially assigned)和初始未赋值(initially unassigned);

 

一、变量分类(variable categories)

   变量分为:静态变量、实例变量;本地变量;数组元素;数值参数、引用参数、输出参数七种。

 

class A
{
   public static int x; //x是静态变量
   int y; //y是实例变量
  //v[0]是数组元素,a是数值参数,b是引用参数,c是输出参数
   void F(int[] v, int a, ref int b, out int c) {
      int i = 1; //i是本地变量
      c = a + b++;
   }
}

 

 1.静态变量

    以static修饰符来声明的字段称为静态变量

   (1)它存在(come into existence)于包含它的类型(containing type)执行静态构建器之前;随关联的程序域(application domain)的消失而消失(cease to exist);

 

 2.实例变量

    不使用static修饰符来声明的字段称为实例变量

    (1)类中的实例变量:当类的新实例创建的时候,类的新实例存在;当不再引用实例且执行了实例的析构器后停止存在;

      1'类的实例变量的初始值就是变量类型的(variable's type)缺省值;

      2'出于明确的赋值检查(definite assignment checking)的目的,类的实例变量被视为(considered)初始已赋值。

    (2)结构中的实例变量:结构的实例变量和它从属的结构变量(struct variable)具有完全相同的生命周期。即,如果结构类型(struct type)的变量开始存在或停止存在时,那么结构的实例变量也是如此。

    (3)结构的实例变量的初始赋值状态(state) ,与包含它的结构变量相同。即,当结构变量被视为初始已赋值时,它的实例变量也被视为初始已赋值;当结构变量被视为初始未赋值时,它的实例变量同样被视为未赋值。

 

 3.本地变量(local variables)

     用本地变量声明(local-variable-declaration)所声明的本地变量,可以发生在块、for、switch或using语句中。

 

 4.数值参数

     数值参数是不使用ref或out修饰符的参数

    (1)数值参数是当调用函数成员(方法、实例构建器、访问器或运算符)时开始存在,并用调用(invocation)中给定的自变量(argument)值来初始化;

    (2)随着函数成员的返回(return of the function member),数值参数停止存在;

    (3)出于明确的赋值检查(assignment checking) 的目的,数值参数被视为初始已赋值(initially assigned)。

 

 5.引用参数(reference parameter)

     引用参数是用ref修饰符声明的参数

 

    (1)引用参数不创建新的存储空间,而是和调用(invocation)函数成员时,作为参数(given as argument)给定的变量一样,表示相同的存储位置。因此,引用参数的值总是和基本(underlying)变量相同。

 

    (2)下面明确的赋值规则适用于引用参数

        1'在函数的成员调用中,在能够作为引用参数传递之前,变量必须被明确地赋值;

        2'在函数成员内(within),引用参数被视为初始已赋值的(assigned)。

 

    (3)对于结构类型的实例方法(instance method)或实例访问器(instance accessor),this关键字的行为(behave)完全象结构类型的引用参数一样。

 

6.输出参数(output parameter)

    输出参数是用out修饰符声明的参数

   (1)输出参数并不创建新存储空间,而是和函数成员调用(invocation)中作为参数(argument)给定的变量的存储位置相同;因此,输出参数的值总是与基础变量相同;

   (2)随着函数成员调用地正常完成,作为输出参数传递的每变量,被视为在该执行路径(execution path)内被赋值;

   (3)在函数成员内,输出参数被视为初始未赋值(initially unassigned);

   (4)在函数成员正常返回前,函数成员的每个输出参数都必须被明确地(definitely)赋值;

   (5)在结构类型(struct type)的实例构建器内,关键字this的行为与该结构类型的引用参数完全相同。

 

 7.数组元素

    当数组实例创建的时候,数组元素开始存在(come into existence);在不再引用(no references)数组实例时,停止存在。

   (1)一个数组的每个元素的初始值,是数组元素类型的(type of array elements)缺省值;

   (2)出于明确的赋值检查(definite assignment checking)的目的,数组元素被视为初始已赋值的(initially assigned)。

 

 

二、变量缺省值

 

 1.变量把下列分类自动初始化为缺省值:

    静态变量;

    类实例(class instances)的实例变量(instance variable);

    数组元素(array element).

 

 2.变量的缺省值由变量的类型决定,遵循如下规则:

       对数值类型的变量,缺省值和数值类型(value-type's)的默认构建器计算出的值相同;

       对引用类型(reference-type)的变量,缺省值为null.

 

 3.初始化为默认值的实现方法,一般是让内存管理器或垃圾回收器在分配内存以供使用之前,将内存初始化为“所有位归零”(all-bits-zero)。因此,使用所有位归零来表示空引用(null reference)很方便。

 

小结:本节主要是讲与变量有关的基本知识。

需明确的是变量的元义在c#中已经进化为字段,根据使用环境,分为静态变量和实例变量。

更具体的使用分成本地变量、数组元素、和参数(包括数值参数、引用参数、输出参数)。

分享到:
评论

相关推荐

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

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

    Hierarchy面板管理插件(Unity)

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

    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...

    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 粘贴

    Hierarchy viewer的运行原理介绍

    #### 一、Hierarchy Viewer概览 Hierarchy Viewer是一款由Google提供的强大工具,专为Android开发者设计,旨在辅助界面设计、调试及优化工作流程。通过直观地展示应用UI的层级结构,它使得开发者能够轻松识别布局...

    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

    5. **参数化(Parameterization)**:通过参数化,设计者可以在多个层次之间共享参数,实现设计参数的统一管理和调整。这有助于保持设计的一致性和简化设计变更。 6. **仿真(Simulation)**:在层次结构中,ADS...

Global site tag (gtag.js) - Google Analytics