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

effective hierarchy(二)之 函数合辑(1)

阅读更多

“暴露”阶段:值->行为(函数)->行为(函数)的参数;打个比方,这就好象“穿得越多,而暴露得就越少”。语言亦是如此。

 

属性之所以在体系中具有重要意义,是因为它可以承担类与类关联的消息人角色。

 

我们知道,低耦合的重要手段之一便是封装,那么在C#的语言概念到达更高的层次之前,对于C#两大类型之一的值类型,必须进行处理,而其中首当其冲的便是变量。对变量进行封装的重要手段,便是属性--属性的本质是系统封装的变量。

 

[MSDN C#2.0]

 

1.字段

字段作为类成员直接存在于类定义中,而在函数中定义的叫变量。

 

(1)在.net事件模型中的发生时刻,处在调用对象实例的构建子(constructor)之前。所以如果构建子存在对字段赋值的行为,那么它将覆盖字段声明期间给定的任何值。

(2)字段可选地(optionally)能够被声明为static,这使得该字段无须实例化便对任何调用者(caller)可得(available)。

(3)如果字段的访问子(accessor)被定义为readonly,则它只能在初始化时或通过构建子赋值,其它的赋值都将是非法的。

(4)static readonly 字段和常数(constant)类似,只不过C# 编译器不能在编译时访问它的值,而在运行时才可以。

 

2.属性

提供了某环境(问题域)中对字段访问的遮断能力:它继承于C++和Java使用的访问子概念,结合了字段字义和访问子(getter/setter方法),故又称之为聪明字段(smart fields)。属性,可以看作对数据的封装。

 

// Address class example using standard accessors保守的方式:访问子
class Address
{
    protected string City;

    protected string ZipCode;
    public string GetZipCode()
    { 
        return this.ZipCode;
    }
    public void SetZipCode(string ZipCode)
    {
        // Validate ZipCode against some data store.
        this.ZipCode = ZipCode;
        // Update this.City based on validated ZIP code.
    }
}

 

(1)属性的一个特点是可携带访问器-即,读取由getter处理,写入由setter处理;

(2)具有getter和setter的属性,那么称该属性是可读写(read-write)的;自然,没有setter,该属性就是只读的(read-only);只有setter,称为只写的(write-only);

(3)set访问子在进行属性写入时,用默认关键字value取得写入值;

(4)属性名与其封装的变量名未必有名字关联。如age变量或Age属性,只是看起来方便而已;

//在C#中使用新的方式:属性
using System;

class Address
{
    protected string city;
    public string City
    { 
     get { return city; }
    }

    protected string zipCode;
    public string ZipCode
    {
        get { return zipCode; }
        set 
        { 
            zipCode = value; 
            city = "Atlanta";
        }
    }
}

class PropertyApp
{
    public static void Main()
    {
        Address addr = new Address();
        addr.ZipCode = "30338";
        string zip = addr.ZipCode;

        Console.WriteLine("The city for ZIP code {0} is {1}", 
                          addr.ZipCode,
                          addr.City);
    }
}

 

   从下图(msil)中,我们可以清楚地看到,C#中的属性来自.net系统自动地为访问子增加了两个方法,分别是get_属性名或set_属性名:

    

 

 

注意:

(1)对于属性,getter和setter必有其一;

(2)属性不能用作函数的参数;

 

3.属性用于接口

 

public interface ISampleInterface
{
    // Property declaration:
    string Name
    {
        get;
        set;
    }
}

   接口属性的访问器不具有体。它只是用来,指示属性是否为--读写、只读或只写。

 

 

小结:

         从另一个角度(pattern) 来看,属性又是语言(具体是C#)对IoC(控制反转)的一次应用,即访问者不需知道它如何实现,只需要知道那里存在这么一个物件-那个'东西'叫属性!

         通过这种手段,我们得到了初始化后置的功效(-a good thing),属性的这种功能特征,叫做“惰性初始化”(lazy initialization)-更适合初始化非常耗费计算资源的问题域。

          还是那句话:“在需要的时候再初始化”!--属性不愧为很棒的语言级接口(interface)机制。

 

  • 大小: 66.1 KB
分享到:
评论

相关推荐

    Hierarchy PRO 2021 v2021.1u9.unitypackage

    Hierarchy PRO 2021 v2021.1u9

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

    1. early_irq_init():早期 IRQ 初始化函数,负责初始化 IRQ subsystem 的基本数据结构。 2. init_irq_default_affinity():初始化 IRQ 的默认亲和力,用于指定 IRQ 的处理器亲和力。 3. arch_probe_nr_irqs():探测...

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

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

    Hierarchy面板管理插件(Unity)

    1. **过滤与排序**:Hierarchy PRO允许用户根据需求筛选和排序场景中的游戏对象,比如按名称、类型或层级结构进行排序,提高了查找特定游戏对象的效率。 2. **颜色标记**:通过为不同类型的对象分配颜色,可以更直观...

    Android 实用工具Hierarchy Viewer实战

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

    android工具Hierarchy_Viewer命令详解

    ### Android工具Hierarchy Viewer命令详解 #### 一、概述 Hierarchy Viewer是Android SDK中自带的一款强大的UI设计与检测工具。它位于Android SDK的`tools`目录下,文件名为`hierarchyviewer.bat`。对于Android...

    SAP BW Hierarchy Extractor

    ### SAP BW Hierarchy Extractor:从SAP R3系统抽取自定义层级至BW系统的架构 #### 业务场景 在很多企业环境中,管理者需要能够访问其下属员工所负责的数据。尽管SAP Business Warehouse (BW)提供了丰富的业务内容...

    Unity 提取并拷贝物体Hierarchy路径

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

    模糊逻辑代码 --隶属函数

    1. 时延的模糊评价规则:该规则用于评估时延的程度,隶属函数使用指数函数来计算隶属度。 2. 丢包率的模糊评价规则:该规则用于评估丢包率的程度,隶属函数使用对数函数来计算隶属度。 3. 抖动的模糊评价规则:该...

    Hierarchy viewer的运行原理介绍

    1. **创建Director实例**:通过`HierarchyViewerApplicationDirector.createDirector()`创建`HierarchyViewerDirector`对象,这标志着Hierarchy Viewer核心功能的初始化。 2. **初始化Debug Bridge**:`...

    Enhanced_Hierarchy_2.0_v2.4.5.unitypackage

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

    MDX函数的使用介绍

    **Hierarchy**函数用于返回指定级别或成员所属的层次结构。例如,`[January].Hierarchy`将返回`Time.FiscalYear`,而`[Quarter].Hierarchy`将返回相同的`Time.FiscalYear`,这表明`Quarter`是`Time.FiscalYear`层次...

    前端项目-d3-hierarchy.zip

    1. **树图(Tree Layout)**:这是最常见的层次数据可视化方式,通过矩形节点和直线连接来表示数据的层次关系。D3的`d3.tree()`函数可以用于创建树图,它自动计算节点的位置和连线路径。 2. **桑基图(Sankey ...

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

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

    WPF Class Hierarchy

    WPF Class Hierarchy

    Hierarchy2 v1.3.10.0

    Hierarchy2 v1.3.10.0

    Hierarchy PRO - Auto HighLighter v21.3f1 2019/5/14更新

    *商用请支持正版* 2019/5/14更新更新的Hierarchy PRO - Auto HighLighter v21.3f1

    mondrian支持的函数以及schame元素属性

    1. 计算函数:SUM、COUNT、AVG、MIN、MAX等,用于对度量值进行聚合操作。 2. 时间函数:如PERIODSTODATE、SAMEPERIODLASTYEAR等,帮助处理时间维度的数据。 3. 阶段函数:如STRTOSET、HEAD、TAIL等,用于处理成员...

    VS2010 MFC Hierarchy Chart

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

Global site tag (gtag.js) - Google Analytics