当前位置:   article > 正文

C#第五天--C#图解教程阅读

c#图解教程


前言

这是学习C#第五天了,感觉在网上找资料看始终是没有那种全面的感觉,于是买一本C#图解教程,来进行查漏补缺…


一、C#编译时和运行时的过程

在这里插入图片描述

如图所示,这里面出现了几个概念

  • 程序集
  • JIT编译器
  • CLR

1,程序集

首先程序集是由.NET语言的编译器接受源代码文件,生成名为程序集的输出文件

  • 程序集要么是可执行的,要么是DLL(DLL:动态链接库,是许多函数的集合)
  • 程序集里面的代码不是本机代码就是可以直接被计算机识别的代码, 而是一种名称为CIL的中间语言
    - CIL Common Intermediate Language 公共中间语言

程序集包含的信息中,包括下列项目

  • 程序的CIL
  • 程序中使用的类型的元数据
  • 对其他程序集引用的元数据

2,JIT编译器

这里注意:程序的CIL直到被调用运行时才会被编译成本机代码
  • 1

JIT是在CLR公共语言运行库中的,JIT在编译之前,CLR会有以下步骤

  • 检查程序集的安全特性
  • 分配内存
  • 可执行的代码被编译器编译为本机代码,这里需要注意:在前面说过,程序集中并不都是可执行代码,还有DLL等

3,CLR

.NET框架的核心组件是CLR,它在操作系统的顶层,负责管理程序的执行,除此之外还提供一些其他的功能

  • 自动垃圾收集
  • 安全和认证
  • 通过访问BCL得到广泛的编程功能
    - BCL 基础类库
  • 反射服务
  • 内存管理
  • JIT编译器
  • 类加载器
  • 安全服务

二、C#基础语法查漏补缺

1,多重标记和值

在C#,可以使用任意数量的替代标记和任意数量的的值

  • 值可以以任何顺序调用
  • 值可以在格式字符串中替换任意次

Console.WriteLine("Three integers are {1}, {0} and {1}", 4 ,5 );

2,对齐说明符

对齐说明符表示字段中字符的最小宽度,对齐说明符有以下特性

  • 对齐说明符是可选的,并且使用逗号啦和索引号分离
  • 它由一个正整数或负整数组成
    - 整数表示字段使用字符的最少数量
    - 符号表示右对齐或者左对齐,正数右对齐,负数左对齐
    Console.WriteLine("{0,10}",200);

注意:值的实际表示可能会比对齐说明符指定的字符数多一些或少一些

  • 如果要表示的字符数比对齐说明符中的指定字符数少,那么其余字符会使用空格填充
  • 如果要表示的字符数多余指定的字符数,对齐说明符会被忽略,并且使用所需的字符进行表示

3,值类型和引用类型

这两种类型的对象在内存中的存储方式不同:

  • 值类型只需要一段单独的内存,用于存储实际的数据
  • 引用类型需要两段内存
    • 第一段存储实际的数据,总是位于堆中

    • 第二段是一个引用,指向数据在堆中的存放位置

引用类型作为值参数和引用参数

对于一个引用类型对象,不管是将其作为值参数传递,还是引用参数传递都可以在方法成员内部修改它的成员。
不过我们并没有在方法内部设置形参本身,我们来在方法内设置引用类型形参时会发生什么

  • 将引用类型对象作为值参数传递,如果在方法内创建一个新对象并赋值给形参,将切断形参与实参之间的关联,并且在方法调用结束后,新对象也将不复存在
  • 将引用类型对象作为引用参数传递 ,如果在方法内创建一个新对象并赋值给形参,在方法结束后该对象仍然存在,并且是实参所引用的值

    class MyClass
    {
        public int Val = 20;
    }
     class Program
    {

        static void RefAsParameter(MyClass f1)
        {
            f1.Val = 50;
            Console.WriteLine($"After member assignment:{f1.Val}");
            f1 = new MyClass();
            Console.WriteLine($"After new Object creation:{f1.Val}");
        }
        static void Main(string[] args)

        {
            MyClass a1 = new MyClass();
            Console.WriteLine($"Before method call:{a1.Val}");

            RefAsParameter(a1);

            Console.WriteLine($"After method call: { a1.Val}");
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

未完待续…

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/454704
推荐阅读
相关标签
  

闽ICP备14008679号