zoukankan      html  css  js  c++  java
  • [最近学习]面向对象读书笔记(二)

    今天又读了一本"Visual C#.NET 技术内幕"的第一部分,有几点对昨天的"面向对象的笔记"有意义的补充,现列出如下:

    1. 常量:
    数量的值仅可在编译时指定,平时不允许更改,常量并不占用对象的空间,而被编译到需要该常量的可执行代码中。故无法对const前加static的修饰符,它们实际上并不与任何具体的对象有关联。

    2. 构造函数:
    构造函数寝值设定项不能访问this指针,因为此时this对象还没有创建好.
    初始化的顺序:
    a. 初始化全部静态字段;
    b. 调用静态构造函数
    c. 初始化全部实例字段
    d. 调用实例构造函数
    故需要先对静态的字段进行赋值

    3. 虚方法:如public virtual void Bite(){..;}
    如果该类的派生类用了new public Bite(){..} (请注意new关键字),在一个方法被声明为new时,编译器将会被告知此方法不会参与到对虚方法的搜索中来,因此即使基类中增加了一个新的虚方法,现有代码也会继续正常工作。

    internal的访问级别表示仅可访问封装该成员的程序集内部的类

    4. 强制类型转换:
    Type1 Type2 _m = (Type2)_m;
    在将子类赋给基类引用时,不需要进行强制类型转换,因为子类总是可以取代基类,但相反的过程不成立 -> 即ZteGir继承了DataGrid,则_zgr可以强制转换为DataGrid,但相反则不可以。(当然不可以 - -!谁知道老爸有多少个儿子呢)
    除了这种强制转换,还可以as关键字,可以尝试性的进行类型转换而不会引发类型转换的异常(InvalidCastException),如:
    ZteGrid _zgr; //ZteGrid继承DataGrid
    DataGrid _dgr = _zgr as DataGrid;
    //但是其后必须(是必须)判断_dgr被转换的对象是否为null,因为as关键字即使转换失败也不会引发异常,而只是赋予引用一个null,从而可以根据程序来进行捕获
    if (_dgr != null){
     ..
    }

    5. 结构: struct
    结构是一种聚合类型,它将多个不同类型的成员组合为一种新的类型。
    1). 结构不能被继承,不能继承类和其它结构,但它可以继承接口;
    2). 与类的实例不同的是,永远不会在堆中为结构的实例分配内存空间,它们是从堆栈分配内存的。(?堆是何概念? 与堆栈有啥区别)
    3). 结构也能有成员函数与构造函数,但注意:结构的构造函数必须包含至少一个参数
    4). 结构不允许声明析构函数

    6. 枚举:可以避免未强类型的错误,我们可以将session,权限串,类型等写在枚举类里,用Color.Red这样来进行强类型取值。是一种良好的编程习惯。
        枚举项的值是基于int的,且默认从0开始,我们也可以用指定第一个项的值来指定枚举值的开始边界.

    7. 获取类型信息:
        is: 检测是否为指定,返回boolean常量 > if (obj is DataGrid){}
        typeof: 检测类型信息,返回System.Type对象 > DataGrid _grid = typeof(DataGrid);
       sizeof: 检测值类型的大小,引用类型的大小无法测定(因其相当于一个函数指针) > int size = sizeof(DataGrid);
      
    8. 运算符重载:须成对进行重载,比如你重载了 ==和!= 但没重载Object.Equals和Object.GetHashCode方法,编译器会报警告。
        Object.Equals用来检验引用是否相等(注意会检验引用喔!而不只是值的相等性)
        Object.GetHashCode()是一个哈希运算符组,它能使哈希表和其他类似的集合数据类型正确分配。哈希函数用于快速生成一个与对象的值相对应的数字(HashCode)

  • 相关阅读:
    sns矩阵
    家庭博客
    媒体治国
    论坛有
    模型指向同一地址,结构体指向不同地址
    苹果开发者公司账号添加个人开发者 加入不了开发者团队
    SourceTree下载 及使用
    关于swift语言中导入OC三方类找不到头文件的解决方法
    iPhone iPad 各种控件默认高度
    iOS 基于MVC设计模式的基类设计
  • 原文地址:https://www.cnblogs.com/syveen/p/241267.html
Copyright © 2011-2022 走看看