C#图解教程读书笔记(一 .NET、变量、类、通过栈如何理解并编写递归函数)


提要,此文章并不会记录过于基础的东西,只会记录个人认为比较重要的概念以及实用的代码,如果您是新手强烈建议阅读实体书,自己一步一步敲一遍


第一章 .NET

  • .Net构成 由CLR(公共语言运行库)和FCL(是BCL(基类库)的超集)构成
  • CLR包含的功能主要有:1、内存管理和垃圾回收 2、代码的安全验证 3、代码执行、线程管理和异常处理
  • 程序集DLL 包含 1、程序的CIL(公共中间语言)2、程序中使用类型的元数据 3、对其他程序集引用的元数据
  • CIL编译本机代码 运行时CLR步骤 1、检查DLL安全特性 2、在内存中分配空间 3、把DLL中可执行代码发送给JIT(即时编译器),然后在调用时编译成本机代码
  • 托管/非托管代码 区别就是非托管代码不受CLR控制

第二章 全是介绍、第三章 讲的字符串格式化format的用法,想看的自己去看。


第四章 类型、变量、存储

  • 一个内存数组,后进先出,主要存储下面几种类型数据
  1. 某些类型变量的值
  2. 程序当前执行的环境
  3. 传递给方法的参数,这个打个比方你给Func(int[] arr)传入[1,2,3,4],此时传入的是数组的地址,你可以通过arr[0] = 100修改,但是如果 arr = new int[]{ 1,1,1,1 },只是说arr执向了这个新数组,你传入的数组并不会改变。所以有时候你需要传入ref或者out
  • 值类型和引用类型 首先值类型一段内存直接存储实际的值, 引用类型 第一段内存存储实际数据在堆内存的位置,第二段内存存储实际数据位于堆内存中,书中的图比较明了
  • 值类型/引用类型补充 一般说到值类型就会想到栈,说到引用类型就会想到堆内存,但是不要认为值类型永远存储在栈内存中, 下面的 r 存储RefObject实例的地址位于栈内存,而堆内存中确确实实存储了值类型对象a
	public class RefObject
	{
		int a = 1;
	}
	//
	RefObject r = new RefObject();
  • 动态类型/静态类型 静态类型:编译时确定类型, 动态类型:变量类型运行时才会被解析。学过python的可能知道 a = 1后 a = [1,2,3,4] 这在C#中是不能运行的

第五章 类的基本概念

  • System.Lazy 可以延迟初始化

第六章 方法

  • 局部变量嵌套块
		// 入栈 1
        int a = 1;
        {
        	// 入栈2
            int b = 2;
        } // 出栈
  • 引用参数 ref,普通参数将会在进入方法体时,为参数在栈上分配内存,而引用参数将不会分配内存,而是直接作为传入参数的别名,所以上面的比方传入参数为Func(ref arr),那么arr = new int[]{ 1,1,1,1 },那么传入的实参改变。
  • 栈帧 当调用一个方法时,将会将一个叫作栈帧整个压入栈顶中。栈帧包含 1、方法退出后继续执行的位置 2、方法分配的内存的参数 3、和方法调用其他数据管理项
  • 根据栈帧理解递归
  1. 首先分析,我希望使用递归打印从1到10数字,Func(int count)方法实质功能就是打印。
  2. 根据下图出栈可以知道,如果想打印1到10数字,就得依照Func(1) -> Func(10)顺序出栈。然后进行反推入栈顺序Func(10) -> Func(1),现在想想入栈顺序是不是调用顺序,只需要每次减1。
    /// <summary>
    ///  打印1~count
    /// </summary>
    /// <param name="count"></param>
    public void RecursionFunc(int count)
    {
        if (count == 0) return;
        RecursionFunc(count-1);
        Debug.Log(count);
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值