• NET基础(1):类型基础


    所有类型都从System.Object 派生,‘运行时’要求每个类型都从System.Object类派生,也就是说,以下两个类型定义完全一致:

    //隐式派生字Object
    class Employee
    {
       do something.....
    }
    
    //显式派生字Object
     class Employee:System.Object
    {
       do something.....
    }

    由于所有类型最终都是从System.Object派生,所以每个类型的每个对象都保证了一组最基本的方法,System.Object提供了一下公共实例方法:

    1、Equals:如果两个对象具有相同的值,就返回true。

    2、GetHashCode:返回对象的值的哈希。

    3、ToString:默认返回类型的完整名称(this.GetType().FullName).

    4、GetType:返回Type派生的一个类型的实例,指出调用GetType的那个对象是什么类型。返回的Type对象可以和反射类配合,获取与对象的类型有关的元数据信息。

    CLR要求所有的对象都使用New关键字创建,以下代码展示了如何创建一个Employee对象:

    Employee e = new Employee("ConstructorParameter");
    

    以下是New操作符所做的事情

    1、计算类型及其所有的基类型(一直到System.Object,虽然他没有定义自己的实例字段)中定义的所有实例需要的字节数,堆上每个对象都需要一些额外的成员,包括类型对象指针(type object poniter) 和 同步块索引(sync block index)。CLR利用这些成员管理对象,额外成员的字节要计入成员的大小。

    2、从托管堆中分配类需要的字节数,从而分类对象的内存,分配所有的字节都设为零。

    3、初始化对象的“类型对象指针”和“同步索引块”成员。

    4、调用类型的实例构造器,传递在New调用中指定的实参。

    new执行了所有这些操作之后,返回指向新建对象的一个引用(指针)。

    注: 没有和New操作符对应的delete操作符:换言之没有办法显式的释放为对象分配的内存,CLR采用了垃圾回收机制(GC)自动检测到一个对象不再被使用和被访问,并自动释放对象的内存。

  • 相关阅读:
    Linux之nginx服务
    设计模式-总结
    linux rabbitmq 远程登录
    swagger常用注解
    nginx总结
    mysql-sql
    dubbo-文档
    JVM总结-Java语法糖与Java编译器
    JVM总结-synchronized
    JVM总结-java内存模型
  • 原文地址:https://www.cnblogs.com/sunyj/p/5537475.html
Copyright © 2020-2023  润新知