好菜!看得好爽!|

Nyanyan

园龄:6年5个月粉丝:3关注:2

唐老狮c#核心笔记

唐老狮c#核心笔记

  1. 类和对象

     第一题,B=null时,引用置空了,B与A无关系,A还是原来new的地址
    第二题,B指向新的地址了,还是与A无关系,AB分别指向不同的地址

  2. 访问修饰符

  3. 构造函数与析构函数

     先调用了一个name参数的构造函数然后执行第二个两个参数的构造函数

     

  4. 垃圾回收

    复制代码
        #region 知识点四 垃圾回收机制
        //垃圾回收,英文简写GC(Garbage Collector)
        //垃圾回收的过程是在遍历堆(Heap)上动态分配的所有对象
        //通过识别它们是否被引用来确定哪些对象是垃圾,哪些对象仍要被使用
        //所谓的垃圾就是没有被任何变量,对象引用的内容
        //垃圾就需要被回收释放
    
        //垃圾回收有很多种算法,比如
        //引用计数(Reference Counting)
        //标记清除(Mark Sweep)
        //标记整理(Mark Compact)
        //复制集合(Copy Collection)
    
        //注意:
        //GC只负责堆(Heap)内存的垃圾回收
        //引用类型都是存在堆(Heap)中的,所以它的分配和释放都通过垃圾回收机制来管理
    
        //栈(Stack)上的内存是由系统自动管理的
        //值类型在栈(Stack)中分配内存的,他们有自己的生命周期,不用对他们进行管理,会自动分配和释放
    
        //C#中内存回收机制的大概原理
        //0代内存     1代内存     2代内存
        //代的概念:
        //代是垃圾回收机制使用的一种算法(分代算法)
        //新分配的对象都会被配置在第0代内存中
        //每次分配都可能会进行垃圾回收以释放内存(0代内存满时) 
    
        //在一次内存回收过程开始时,垃圾回收器会认为堆中全是垃圾,会进行以下两步
        //1.标记对象 从根(静态字段、方法参数)开始检查引用对象,标记后为可达对象,未标记为不可达对象
        //  不可达对象就认为是垃圾
        //2.搬迁对象压缩堆  (挂起执行托管代码线程) 释放未标记的对象 搬迁可达对象 修改引用地址
    
        //大对象总被认为是第二代内存  目的是减少性能损耗,提高性能
        //不会对大对象进行搬迁压缩  85000字节(83kb)以上的对象为大对象
      //手动触发垃圾回收的方法
    //一般情况下 我们不会频繁调用
    //都是在 Loading过场景时 才调用
    GC.Collect();
    #endregion
    复制代码
  5. 成员属性

     

  6.  索引器

     索引器可以重载

  7. 静态成员

    静态成员运行程序就会有,所以在静态成员中不能使用非静态成员,因为此时非静态成员都还没创建
    静态过多的话,占用了过多的内存不会释放

  8. 静态构造函数

  9. 拓展方法

  10. 运算符重载

  11. 继承

     

  12. 里氏替换原则

     GameObject父类

     

  13. 继承中的构造函数

  14. object类与装箱、拆箱

  15. 多态

  16. 抽象类和抽象方法

     

  17. 接口

  18. object对象
    object.Memberwise方法返回一个浅拷贝的对象,只拷贝对象的引用,引用指向的还是同一个地方
  19. String

     indexof找不到返回-1

     反向查找,找到第一个,返回第一个的索引,反向找到的第一个"唐老狮"是最后面的,下标是5,所以返回5,如果没找到也返回-1

     Remove方法不会改变原字符串,会返回一个新的字符串,这里重载的参数4和1,在移除的时候,包括该下标自己

     

  20.  StringBuilder

     

  21.  结构体与类

    复制代码
                #region 区别概述
                //结构体和类最大的区别是在存储空间上的,因为结构体是值,类是引用,
                //因此他们的存储位置一个在栈上,一个在堆上,
                //通过之前知识点的学习,我相信你能够从此处看出他们在使用的区别——值和引用对象在赋值时的区别。
    
                //结构体和类在使用上很类似,结构体甚至可以用面向对象的思想来形容一类对象。
                //结构体具备着面向对象思想中封装的特性,但是它不具备继承和多态的特性,因此大大减少了它的使用频率。
                //由于结构体不具备继承的特性,所以它不能够使用protected保护访问修饰符。
                #endregion
    
                #region 细节区别
                //1.结构体是值类型,类是引用类型
                //2.结构体存在栈中,类存在堆中
                //3.结构体成员不能使用protected访问修饰符,而类可以
                //4.结构体成员变量申明不能指定初始值,而类可以
                //5.结构体不能申明无参的构造函数,而类可以
                //6.结构体申明有参构造函数后,无参构造不会被顶掉
                //7.结构体不能申明析构函数,而类可以
                //8.结构体不能被继承,而类可以
                //9.结构体需要在构造函数中初始化所有成员变量,而类随意
                //10.结构体不能被静态static修饰(不存在静态结构体),而类可以
                //11.结构体不能在自己内部申明和自已一样的结构体变量,而类可以
                #endregion
    
                #region 结构体的特别之处
                //结构体可以继承 接口 因为接口是行为的抽象
                #endregion
    
                #region 如何选择结构体和类
                //1.想要用继承和多态时,直接淘汰结构体,比如玩家、怪物等等
                //2.对象是数据集合时,优先考虑结构体,比如位置、坐标等等
                //3.从值类型和引用类型赋值时的区别上去考虑,比如经常被赋值传递的对象,并且
                //改变赋值对象,原对象不想跟着变化时,就用结构体。比如坐标、向量、旋转等等
                #endregion
    复制代码
  22. 抽象类与接口
    复制代码
                #region 知识回顾
                //抽象类和抽象方法
                //abstract修饰的类和方法
                //抽象类 不能实例化
                //抽象方法只能在抽象类中申明 是个纯虚方法 必须在子类中实现
    
                //接口
                //interface 自定义类型
                //是行为的抽象
                //不包含成员变量
                //仅包含方法、属性、索引器、事件,成员都不能实现,建议不写访问修饰符,默认public
                #endregion
    
                #region 知识点一 相同点
                //1.都可以被继承
                //2.都不能直接实例化
                //3.都可以包含方法申明
                //4.子类必须实现未实现的方法
                //5.都遵循里氏替换原则
                #endregion
    
                #region 知识点二 区别
                //1.抽象类中可以有构造函数;接口中不能
                //2.抽象类只能被单一继承;接口可以被继承多个
                //3.抽象类中可以有成员变量;接口中不能
                //4.抽象类中可以申明成员方法,虚方法,抽象方法,静态方法;接口中只能申明没有实现的抽象方法
                //5.抽象类方法可以使用访问修饰符;接口中建议不写,默认public
                #endregion
    
                #region 如何选择抽象类和接口
                //表示对象的用抽象类,表示行为拓展的用接口
                //不同对象拥有的共同行为,我们往往可以使用接口来实现
                //举个例子:
                //动物是一类对象,我们自然会选择抽象类;而飞翔是一个行为,我们自然会选择接口。
                #endregion
    复制代码

     

本文作者:Nyan

本文链接:https://www.cnblogs.com/nyan/p/17651585.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Nyanyan  阅读(317)  评论(0编辑  收藏  举报
   
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起