zoukankan      html  css  js  c++  java
  • [C#1] 2类型基础

    1.System.Object

    CLR要求每个类型都要继承自System.Object[直接或者间接方式],如果不显示继承,编译器会自动为我们添加对System.Object的继承。

    System.Object提供几个公有实例方法:

    1. Equals:如果两个对象具有相同的值,返回true;
    2. GetHashCode: 返回对象的值的散列码。
    3. ToString: 默认情况下返回类型的完全限定名。一般自定义类型中要重写该方法,返回有意义的字符串;
    4. GetType: 返回一个类型为继承自Type的对象实例,返回的Type对象和反射类一起来获得元数据信息,本方法是一个非虚方法,防止一个类通过重写隐瞒真实类型,从而破坏类型安全。

    两个受保护方法:

    1. MemberwiseClone:非虚方法,它创建一个新的类型实例【浅拷贝(共享引用成员)】;
    2. Finalize:虚方法,执行垃圾回收之前会调用该方法;

    引用类型new的过程:

    1. 从托管堆中分配指定类型所需数量的字节来作为其存储对象的内存空间;
    2. 初始化对象的附加成员(overhead members):一是类型方法表指针,二是SyncBlockIndex【线程同步控制、该字段的某些位还用作垃圾收集时的标记、Object默认的GetHashCode方法也调用了该字段】;
    3. 调用类型的实例构造器【CLR并没有要求调用基类中相应的构造器】
    4. 完成上述操作后返回一个指向新创建对象的引用。

    2.类型转换

    1. 强制类型转换,需要程序员自己负责,如果转换不成功抛出Sysem.InvalidCastException【无效的转换】异常;
    2. 隐式类型转换,C#不需要特殊的语法就可以将对象转换为其任何一个基类型;
    3. is,is检查制定对象是否兼容与指定的类型,返回bool;
    4. as类型转换,成功返回对象引用,失败返回null;

    3.命名空间和程序集

    首先CLR没有命名空间的概念,也就是CLR根本就不认识命名空间。CLR用的是类型的完全限定名,一个程序集中可以存在多个命名空间,一个命名空间下也可以包含多个程序集。

  • 相关阅读:
    unity3d 启用某层设置
    Unity同 iOS,Android数据交互
    Unity发布EXE去掉边框生成安装程序的最简单方法
    判断物体相对自己的方位
    相机Culling Mask 用法
    LitJson 用法
    Unity3d Attribute 总结
    unity3d shader 预定义着色器预处理宏
    (转)傅里叶分析 变换等
    Shaders: ShaderLab & Fixed Function shaders
  • 原文地址:https://www.cnblogs.com/linianhui/p/csharp1_tyles.html
Copyright © 2011-2022 走看看